<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.worldofdragon.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maestrosoftware</id>
	<title>The Dragon Archive - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.worldofdragon.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maestrosoftware"/>
	<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Special:Contributions/Maestrosoftware"/>
	<updated>2026-10-01T20:22:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.15</generator>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=RACE_Computer_Expansion_Cage&amp;diff=9717</id>
		<title>RACE Computer Expansion Cage</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=RACE_Computer_Expansion_Cage&amp;diff=9717"/>
		<updated>2021-06-12T09:20:18Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: Got confirmation (from tjewell) that reading address $feff does switch to slot 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a cartridge port replicator by [[RACE Electronics]], pretty much like the [http://www.cocopedia.com/wiki/index.php/Multi-Pak Tandy CoCo MultiPak], that allows up to 4 cartridges to be inserted.&lt;br /&gt;
&lt;br /&gt;
==Technical information==&lt;br /&gt;
* Writing to address $feff will select one of the 4 slots (0-3 - only bits 0 and 1 are used ; other bits are discarded).&lt;br /&gt;
* Reading address $feff will select slot 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pictures ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:RACE_Expansion01.JPG&lt;br /&gt;
Image:RACE_Expansion02.JPG&lt;br /&gt;
Image:RACE_Expansion03.JPG&lt;br /&gt;
Image:RACE_Expansion04.JPG&lt;br /&gt;
Image:RACE_Expansion05.JPG&lt;br /&gt;
Image:RACE_Expansion06.JPG&lt;br /&gt;
Image:RACE_Expansion07.JPG&lt;br /&gt;
Image:Race-cart-front.jpg&lt;br /&gt;
Image:Race-cart-back.jpg&lt;br /&gt;
Image:Race-cage-front.jpg&lt;br /&gt;
Image:Race-cage-back.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=RACE_Computer_Expansion_Cage&amp;diff=9716</id>
		<title>RACE Computer Expansion Cage</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=RACE_Computer_Expansion_Cage&amp;diff=9716"/>
		<updated>2021-06-03T17:38:48Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a cartridge port replicator by [[RACE Electronics]], pretty much like the [http://www.cocopedia.com/wiki/index.php/Multi-Pak Tandy CoCo MultiPak], that allows up to 4 cartridges to be inserted.&lt;br /&gt;
&lt;br /&gt;
==Technical information==&lt;br /&gt;
* Writing to address $feff will select one of the 4 slots (0-3 - only bits 0 and 1 are used ; other bits are discarded).&lt;br /&gt;
* Reading address $feff will select slot 2 (to be confirmed on other boards)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pictures ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:RACE_Expansion01.JPG&lt;br /&gt;
Image:RACE_Expansion02.JPG&lt;br /&gt;
Image:RACE_Expansion03.JPG&lt;br /&gt;
Image:RACE_Expansion04.JPG&lt;br /&gt;
Image:RACE_Expansion05.JPG&lt;br /&gt;
Image:RACE_Expansion06.JPG&lt;br /&gt;
Image:RACE_Expansion07.JPG&lt;br /&gt;
Image:Race-cart-front.jpg&lt;br /&gt;
Image:Race-cart-back.jpg&lt;br /&gt;
Image:Race-cage-front.jpg&lt;br /&gt;
Image:Race-cage-back.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9715</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9715"/>
		<updated>2021-06-03T17:37:23Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FEFF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04-FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF44 (?)&lt;br /&gt;
| [[Delta DOS]]&lt;br /&gt;
| (from a quick disassembly of Delta DOS ROM)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF49&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon D CMD_REG Command/Result ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_LATCH_REG - single byte parameters  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_READ_DATA_REG  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_WRITE_DATA_REG  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF54&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_STATUS_REG AVR status  ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF55&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_PIA_MAP PIA redirect (write only)  ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon D_RAM_CTRL RAM / ROM control register ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| D_SAMBITS_MSB (16 bits as programmed to SAM) ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF59&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| D_SAMBITS_LSB (16 bits as programmed to SAM) ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF59&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5A-FF5B&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| RAM bank read / write registers ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5F&lt;br /&gt;
| [[Touchmaster Tablet]]&lt;br /&gt;
| PIA ( [http://archive.worldofdragon.org/index.php?title=File:Touchmaster_UserGuide_09.jpg])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF69&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF79&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF80-FF8F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - default addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-FF9F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFB0-FFBF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE0&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 control register ([https://archive.worldofdragon.org/phpBB3/download/file.php?id=4675])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE1&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 data register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE2&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| Memory bank register  &amp;amp; status of 6845 display&lt;br /&gt;
|&lt;br /&gt;
* Bits 1-2 : select 32K bank (00 = standard lower 32K ; 01= bank A ; 11 = bank B)&lt;br /&gt;
* Read bit 0 : 0=video display available (i.e. blanking) / 1=video display not available (not blanking)&lt;br /&gt;
* Write bit 0: 1=select video RAM in the lower 2K&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9714</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9714"/>
		<updated>2021-05-31T13:38:02Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */  Added DragonMMC info from forum&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04-FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF44 (?)&lt;br /&gt;
| [[Delta DOS]]&lt;br /&gt;
| (from a quick disassembly of Delta DOS ROM)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF49&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon D CMD_REG Command/Result ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_LATCH_REG - single byte parameters  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_READ_DATA_REG  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_WRITE_DATA_REG  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF54&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_STATUS_REG AVR status  ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF55&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_PIA_MAP PIA redirect (write only)  ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon D_RAM_CTRL RAM / ROM control register ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| D_SAMBITS_MSB (16 bits as programmed to SAM) ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF59&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| D_SAMBITS_LSB (16 bits as programmed to SAM) ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF59&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5A-FF5B&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| RAM bank read / write registers ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5F&lt;br /&gt;
| [[Touchmaster Tablet]]&lt;br /&gt;
| PIA ( [http://archive.worldofdragon.org/index.php?title=File:Touchmaster_UserGuide_09.jpg])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF69&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF79&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF80-FF8F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - default addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-FF9F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFB0-FFBF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE0&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 control register ([https://archive.worldofdragon.org/phpBB3/download/file.php?id=4675])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE1&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 data register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE2&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| Memory bank register  &amp;amp; status of 6845 display&lt;br /&gt;
|&lt;br /&gt;
* Bits 1-2 : select 32K bank (00 = standard lower 32K ; 01= bank A ; 11 = bank B)&lt;br /&gt;
* Read bit 0 : 0=video display available (i.e. blanking) / 1=video display not available (not blanking)&lt;br /&gt;
* Write bit 0: 1=select video RAM in the lower 2K&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9713</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9713"/>
		<updated>2021-05-31T13:34:40Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04-FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF44 (?)&lt;br /&gt;
| [[Delta DOS]]&lt;br /&gt;
| (from a quick disassembly of Delta DOS ROM)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF49&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon D CMD_REG Command/Result ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_LATCH_REG - single byte parameters  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_READ_DATA_REG  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_WRITE_DATA_REG  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
-&lt;br /&gt;
| FF54&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_STATUS_REG AVR status  ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
-&lt;br /&gt;
| FF55&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC D_PIA_MAP PIA redirect (write only)  ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
-&lt;br /&gt;
| FF56&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon D_RAM_CTRL RAM / ROM control register ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
-&lt;br /&gt;
| FF58&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| D_SAMBITS_MSB (16 bits as programmed to SAM) ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
-&lt;br /&gt;
| FF59&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| D_SAMBITS_LSB (16 bits as programmed to SAM) ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF59&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5A-FF5B&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| RAM bank read / write registers ( [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5F&lt;br /&gt;
| [[Touchmaster Tablet]]&lt;br /&gt;
| PIA ( [http://archive.worldofdragon.org/index.php?title=File:Touchmaster_UserGuide_09.jpg])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF69&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF79&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF80-FF8F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - default addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-FF9F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFB0-FFBF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE0&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 control register ([https://archive.worldofdragon.org/phpBB3/download/file.php?id=4675])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE1&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 data register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE2&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| Memory bank register  &amp;amp; status of 6845 display&lt;br /&gt;
|&lt;br /&gt;
* Bits 1-2 : select 32K bank (00 = standard lower 32K ; 01= bank A ; 11 = bank B)&lt;br /&gt;
* Read bit 0 : 0=video display available (i.e. blanking) / 1=video display not available (not blanking)&lt;br /&gt;
* Write bit 0: 1=select video RAM in the lower 2K&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9712</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9712"/>
		<updated>2021-05-29T21:43:28Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */  added coco Miniflash (info from forum)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04-FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF44 (?)&lt;br /&gt;
| [[Delta DOS]]&lt;br /&gt;
| (from a quick disassembly of Delta DOS ROM)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF49&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF59&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5F&lt;br /&gt;
| [[Touchmaster Tablet]]&lt;br /&gt;
| PIA ( [http://archive.worldofdragon.org/index.php?title=File:Touchmaster_UserGuide_09.jpg])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF69&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF79&lt;br /&gt;
| [http://www.cloud9tech.com/ Cloud-9] Coco miniFlash&lt;br /&gt;
| Flash bank selection register (selectable between FF49, FF59, FF69, FF79) [https://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;t=10938]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF80-FF8F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - default addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-FF9F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFB0-FFBF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE0&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 control register ([https://archive.worldofdragon.org/phpBB3/download/file.php?id=4675])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE1&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 data register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE2&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| Memory bank register  &amp;amp; status of 6845 display&lt;br /&gt;
|&lt;br /&gt;
* Bits 1-2 : select 32K bank (00 = standard lower 32K ; 01= bank A ; 11 = bank B)&lt;br /&gt;
* Read bit 0 : 0=video display available (i.e. blanking) / 1=video display not available (not blanking)&lt;br /&gt;
* Write bit 0: 1=select video RAM in the lower 2K&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9711</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9711"/>
		<updated>2021-05-28T22:06:21Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04-FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF44 (?)&lt;br /&gt;
| [[Delta DOS]]&lt;br /&gt;
| (from a quick disassembly of Delta DOS ROM)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5F&lt;br /&gt;
| [[Touchmaster Tablet]]&lt;br /&gt;
| PIA ( [http://archive.worldofdragon.org/index.php?title=File:Touchmaster_UserGuide_09.jpg])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF80-FF8F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - default addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-FF9F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFB0-FFBF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE0&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 control register ([https://archive.worldofdragon.org/phpBB3/download/file.php?id=4675])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE1&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 data register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE2&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| Memory bank register  &amp;amp; status of 6845 display&lt;br /&gt;
|&lt;br /&gt;
* Bits 1-2 : select 32K bank (00 = standard lower 32K ; 01= bank A ; 11 = bank B)&lt;br /&gt;
* Read bit 0 : 0=video display available (i.e. blanking) / 1=video display not available (not blanking)&lt;br /&gt;
* Write bit 0: 1=select video RAM in the lower 2K&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9710</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9710"/>
		<updated>2021-05-28T21:58:10Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04-FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5F&lt;br /&gt;
| [[Touchmaster Tablet]]&lt;br /&gt;
| PIA ( [http://archive.worldofdragon.org/index.php?title=File:Touchmaster_UserGuide_09.jpg])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF80-FF8F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - default addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-FF9F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFB0-FFBF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE0&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 control register ([https://archive.worldofdragon.org/phpBB3/download/file.php?id=4675])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE1&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 data register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE2&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| Memory bank register  &amp;amp; status of 6845 display&lt;br /&gt;
|&lt;br /&gt;
* Bits 1-2 : select 32K bank (00 = standard lower 32K ; 01= bank A ; 11 = bank B)&lt;br /&gt;
* Read bit 0 : 0=video display available (i.e. blanking) / 1=video display not available (not blanking)&lt;br /&gt;
* Write bit 0: 1=select video RAM in the lower 2K&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9709</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9709"/>
		<updated>2021-05-28T21:56:06Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04-FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5F&lt;br /&gt;
| [[Touchmaster Tablet]]&lt;br /&gt;
| PIA ( [http://archive.worldofdragon.org/index.php?title=File:Touchmaster_UserGuide_09.jpg])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF80-FF8F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - default addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-FF9F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFB0-FFBF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE0&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 control registerban&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE1&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| 6845 data register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFE2&lt;br /&gt;
| Compusense [[Dragon Plus]]&lt;br /&gt;
| Memory bank register  &amp;amp; status of 6845 display&lt;br /&gt;
|&lt;br /&gt;
* Bits 1-2 : select 32K bank (00 = standard lower 32K ; 01= bank A ; 11 = bank B)&lt;br /&gt;
* Read bit 0 : 0=video display available (i.e. blanking) / 1=video display not available (not blanking)&lt;br /&gt;
* Write bit 0: 1=select video RAM in the lower 2K&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9708</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9708"/>
		<updated>2021-05-28T21:38:39Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04-FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5F&lt;br /&gt;
| [[Touchmaster Tablet]]&lt;br /&gt;
| PIA ( [http://archive.worldofdragon.org/index.php?title=File:Touchmaster_UserGuide_09.jpg])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF80-FF8F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - default addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-FF9F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFB0-FFBF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate addresses&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9707</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9707"/>
		<updated>2021-05-28T21:38:08Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04-FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5F&lt;br /&gt;
| [[Touchmaster Tablet]]&lt;br /&gt;
| PIA ( [http://archive.worldofdragon.org/index.php?title=File:Touchmaster_UserGuide_09.jpg])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF80-FF8F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]]&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-FF9F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate address&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate address&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFB0-FFBF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate address&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9706</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9706"/>
		<updated>2021-05-28T21:37:30Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04-FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5F&lt;br /&gt;
| [[Touchmaster Tablet]]&lt;br /&gt;
| PIA ( [http://archive.worldofdragon.org/index.php?title=File:Touchmaster_UserGuide_09.jpg])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF80-FF9F&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]]&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-FFAF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate address&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFBF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate address&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFB0-FFCF&lt;br /&gt;
| [[The Dragon&amp;#039;s Claw]] - alternate address&lt;br /&gt;
| Rockwell 6522 VIA - 16 registers, base address can be changed to FF90, FFA0 or FFB0 with a wire link&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9705</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9705"/>
		<updated>2021-05-28T21:29:48Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04-FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5F&lt;br /&gt;
| [[Touchmaster Tablet]]&lt;br /&gt;
| PIA ( [http://archive.worldofdragon.org/index.php?title=File:Touchmaster_UserGuide_09.jpg])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9704</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9704"/>
		<updated>2021-05-28T21:29:07Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5F&lt;br /&gt;
| [[Touchmaster Tablet]]&lt;br /&gt;
| PIA ( [http://archive.worldofdragon.org/index.php?title=File:Touchmaster_UserGuide_09.jpg])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9703</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9703"/>
		<updated>2021-05-28T21:25:43Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF42-FF43&lt;br /&gt;
| [[Dragon Speech Synthesis|JCB Microsystems&amp;#039; Dragon Speech Synthesis]]&lt;br /&gt;
| PIA data and control registers ([https://archive.worldofdragon.org/browse/downloads/Software/Dragon/J.C.B%20Microsystems/Dragon%2032%20Speech%20Synthesis/JCB%20Speech%20Synthesis%20Module%20User%20Manual.pdf])&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9702</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9702"/>
		<updated>2021-05-28T20:53:47Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Command/status register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  Track register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| Sector register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| Floppy data register&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Talk:Memory_Map&amp;diff=9701</id>
		<title>Talk:Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Talk:Memory_Map&amp;diff=9701"/>
		<updated>2021-05-28T20:23:07Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: Created page with &amp;quot;=FF56 for DragonMMC= In Simon&amp;#039;s first version of this page, it said that FF56 was used by DragonMMC. I can&amp;#039;t find a reference to that address in DragonMMC&amp;#039;s dragon assembler s...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=FF56 for DragonMMC=&lt;br /&gt;
In Simon&amp;#039;s first version of this page, it said that FF56 was used by DragonMMC. I can&amp;#039;t find a reference to that address in DragonMMC&amp;#039;s dragon assembler source code... but I might not have looked thoroughly.&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9700</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9700"/>
		<updated>2021-05-28T20:22:16Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| For CocoSDC: command register (write), status register (read) [http://archive.worldofdragon.org/phpBB3/download/file.php?id=2248]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  For CocoSDC: param register 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| For CocoSDC: param register 2 or data register 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| For CocoSDC: param register 3 or data register 2&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9699</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9699"/>
		<updated>2021-05-28T20:19:26Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48, [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| For CocoSDC: command register (write), status register (read) [http://archive.worldofdragon.org/phpBB3/download/file.php?id=2248]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  For CocoSDC: param register 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| For CocoSDC: param register 2 or data register 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| For CocoSDC: param register 3 or data register 2&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]] ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9698</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9698"/>
		<updated>2021-05-28T20:13:06Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register [https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48&amp;lt; [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| For CocoSDC: command register (write), status register (read) [http://archive.worldofdragon.org/phpBB3/download/file.php?id=2248]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  For CocoSDC: param register 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| For CocoSDC: param register 2 or data register 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| For CocoSDC: param register 3 or data register 2&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]] ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+ (in MPI mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF77&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF78-FF7B&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| V9958 ports &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7D&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| YM2149 ports&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7E&lt;br /&gt;
| Dragon-MSX2+ (in native mode)&lt;br /&gt;
| Video select port&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9697</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9697"/>
		<updated>2021-05-28T20:10:38Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register [https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48&amp;lt; [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| For CocoSDC: command register (write), status register (read) [http://archive.worldofdragon.org/phpBB3/download/file.php?id=2248]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  For CocoSDC: param register 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| For CocoSDC: param register 2 or data register 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| For CocoSDC: param register 3 or data register 2&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]] ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF57&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| YM2413 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF58-FF5B&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| V9958 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5C-FF5D&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| YM2149 ports ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| Video select port ([http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906])&lt;br /&gt;
| Only bit 0&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF7E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9696</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9696"/>
		<updated>2021-05-28T20:08:21Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register [https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48&amp;lt; [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF43 (mirrored upto FF5F)&lt;br /&gt;
| Voltmace Delta 14B multi-button joystick adapter&lt;br /&gt;
| 6821 PIA [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| For CocoSDC: command register (write), status register (read) [http://archive.worldofdragon.org/phpBB3/download/file.php?id=2248]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  For CocoSDC: param register 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| For CocoSDC: param register 2 or data register 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| For CocoSDC: param register 3 or data register 2&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Data Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4A&lt;br /&gt;
| CocoSDC&lt;br /&gt;
| Flash Control Register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF4C-FF4F (mirrors once at FF5C-FF5F)&lt;br /&gt;
| Ikon Drive&lt;br /&gt;
| [http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=9&amp;amp;p=23906#p23906]&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| | [[DragonMMC SDCard|DragonMMC]] ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF7E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9695</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9695"/>
		<updated>2021-05-28T20:03:19Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register [https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48&amp;lt; [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| For CocoSDC: command register (write), status register (read) [http://archive.worldofdragon.org/phpBB3/download/file.php?id=2248]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|  For CocoSDC: param register 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| For CocoSDC: param register 2 or data register 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| For CocoSDC: param register 3 or data register 2&lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| | [[DragonMMC SDCard|DragonMMC]] ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF7E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9694</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9694"/>
		<updated>2021-05-28T19:57:16Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register [https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48&amp;lt; [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller - HDDATA - data transfer byte (read/write)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: read HDSTAT status, write HDRSET reset&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDATTN ; get attention of controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| MFM disk controller: write HDMASK ; controller dma and interrupts (not used on coco or dragon)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| | [[DragonMMC SDCard|DragonMMC]] ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF7E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59 )&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9693</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9693"/>
		<updated>2021-05-28T19:45:44Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments and references&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48,  [http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf] p.196 )&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 0 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A data register  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side A control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B data register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| PIA 1 side B control register ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf] p.48)&lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf Burke &amp;amp; Burke Coco-XT]&lt;br /&gt;
| HDDATA - data transfer byte&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC CMD_REG ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Latch  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Read data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| Dragon MMC Write data reg  ( [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm], [https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| | [[DragonMMC SDCard|DragonMMC]] ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF7E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| MPI (and clones) slot selection  ([https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf], p.59&lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9692</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9692"/>
		<updated>2021-05-28T19:37:02Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| Paper manual&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
|&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| &lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| Burke &amp;amp; Burke Coco-XT&lt;br /&gt;
| https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/CoCo%20XT%20Hard%20Disk%20Interface%20v2.4%20(Burke%20&amp;amp;%20Burke).pdf&lt;br /&gt;
| HDDATA - data transfer byte&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC CMD_REG&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Read data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Write data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| | [[DragonMMC SDCard|DragonMMC]] ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF7E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf, p.59&lt;br /&gt;
| MPI (and clones) slot selection &lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9691</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9691"/>
		<updated>2021-05-28T19:34:34Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| Paper manual&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40-FF5F&lt;br /&gt;
| [[Dragon I/O Cartridge (Rink)]]&lt;br /&gt;
|&lt;br /&gt;
| To control which output pins are high and which are low, you write a single byte to any address between 0xFF40 and 0xFF5F. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| &lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC CMD_REG&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Read data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Write data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| | [[DragonMMC SDCard|DragonMMC]] ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF7E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf, p.59&lt;br /&gt;
| MPI (and clones) slot selection &lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9690</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9690"/>
		<updated>2021-05-28T19:31:49Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| Paper manual&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| &lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC CMD_REG&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Read data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| [[DragonMMC SDCard|DragonMMC]]&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Write data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| | [[DragonMMC SDCard|DragonMMC]] ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF7E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf, p.59&lt;br /&gt;
| MPI (and clones) slot selection &lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9689</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9689"/>
		<updated>2021-05-28T19:30:20Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| Paper manual&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| &lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC CMD_REG&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Read data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Write data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| Dragon MMC ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF7E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A-FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf, p.59&lt;br /&gt;
| MPI (and clones) slot selection &lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9688</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9688"/>
		<updated>2021-05-28T19:28:30Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* DIY PROJECTS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| Paper manual&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| &lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC CMD_REG&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Read data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Write data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| Dragon MMC ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF79&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7B&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf, p.59&lt;br /&gt;
| MPI (and clones) slot selection &lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9687</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9687"/>
		<updated>2021-05-28T19:28:16Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| Paper manual&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| &lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC CMD_REG&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Read data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Write data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| Dragon MMC ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF79&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7B&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7C-FF7E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7F&lt;br /&gt;
| &lt;br /&gt;
* MPI&lt;br /&gt;
* Mega-Mini MPI&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf, p.59&lt;br /&gt;
| MPI (and clones) slot selection &lt;br /&gt;
|&lt;br /&gt;
* Bits 5-4:  # of active CTS slot (ROM)&lt;br /&gt;
* Bits 1-0:  # of active SCS slot (Floppy Disk Controller)&lt;br /&gt;
|-&lt;br /&gt;
| FF90-91&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFA0-FFAF&lt;br /&gt;
| MooH&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FFC0-FFD9&lt;br /&gt;
| All Dragons&lt;br /&gt;
| SAM Control bits (see below)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DIY PROJECTS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         FF50 - DragonMMC&lt;br /&gt;
         FF54 - DragonMMC&lt;br /&gt;
         FF56 - Dragon-MSX2+ | DragonMMC&lt;br /&gt;
         FF57 - Dragon-MSX2+&lt;br /&gt;
         FF58 - Dragon-MSX2+&lt;br /&gt;
         FF59 - Dragon-MSX2+&lt;br /&gt;
         FF5A - Dragon-MSX2+&lt;br /&gt;
         FF5B - Dragon-MSX2+&lt;br /&gt;
         FF5C - Dragon-MSX2+&lt;br /&gt;
         FF5D - Dragon-MSX2+&lt;br /&gt;
         FF5E - Dragon MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF76 - Dragon-MSX2+&lt;br /&gt;
         FF77 - Dragon-MSX2+&lt;br /&gt;
         FF78 - Dragon-MSX2+&lt;br /&gt;
         FF79 - Dragon-MSX2+&lt;br /&gt;
         FF7A - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7B - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7C - Dragon-MSX2+&lt;br /&gt;
         FF7D - Dragon-MSX2+&lt;br /&gt;
         FF7E - Dragon-MSX2+&lt;br /&gt;
         FF7F - Mega-Mini MPI | DOSPlus Extended&lt;br /&gt;
&lt;br /&gt;
         FF90 - MooH&lt;br /&gt;
         FF91 - MooH&lt;br /&gt;
         FFA0 - MooH&lt;br /&gt;
         FFA1 - MooH&lt;br /&gt;
         FFA2 - MooH&lt;br /&gt;
         FFA3 - MooH&lt;br /&gt;
         FFA4 - MooH&lt;br /&gt;
         FFA5 - MooH&lt;br /&gt;
         FFA6 - MooH&lt;br /&gt;
         FFA7 - MooH&lt;br /&gt;
         FFA8 - MooH&lt;br /&gt;
         FFA9 - MooH&lt;br /&gt;
         FFAA - MooH&lt;br /&gt;
         FFAB - MooH&lt;br /&gt;
         FFAC - MooH&lt;br /&gt;
         FFAD - MooH&lt;br /&gt;
         FFAE - MooH&lt;br /&gt;
         FFAF - MooH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
65471    FFBF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9686</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9686"/>
		<updated>2021-05-28T19:24:29Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| Paper manual&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| &lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC CMD_REG&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Read data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Write data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| Dragon MMC ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF76-FF79&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7A&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7B&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF7B&lt;br /&gt;
| Orchestra 90&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DIY PROJECTS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         FF50 - DragonMMC&lt;br /&gt;
         FF54 - DragonMMC&lt;br /&gt;
         FF56 - Dragon-MSX2+ | DragonMMC&lt;br /&gt;
         FF57 - Dragon-MSX2+&lt;br /&gt;
         FF58 - Dragon-MSX2+&lt;br /&gt;
         FF59 - Dragon-MSX2+&lt;br /&gt;
         FF5A - Dragon-MSX2+&lt;br /&gt;
         FF5B - Dragon-MSX2+&lt;br /&gt;
         FF5C - Dragon-MSX2+&lt;br /&gt;
         FF5D - Dragon-MSX2+&lt;br /&gt;
         FF5E - Dragon MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF76 - Dragon-MSX2+&lt;br /&gt;
         FF77 - Dragon-MSX2+&lt;br /&gt;
         FF78 - Dragon-MSX2+&lt;br /&gt;
         FF79 - Dragon-MSX2+&lt;br /&gt;
         FF7A - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7B - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7C - Dragon-MSX2+&lt;br /&gt;
         FF7D - Dragon-MSX2+&lt;br /&gt;
         FF7E - Dragon-MSX2+&lt;br /&gt;
         FF7F - Mega-Mini MPI | DOSPlus Extended&lt;br /&gt;
&lt;br /&gt;
         FF90 - MooH&lt;br /&gt;
         FF91 - MooH&lt;br /&gt;
         FFA0 - MooH&lt;br /&gt;
         FFA1 - MooH&lt;br /&gt;
         FFA2 - MooH&lt;br /&gt;
         FFA3 - MooH&lt;br /&gt;
         FFA4 - MooH&lt;br /&gt;
         FFA5 - MooH&lt;br /&gt;
         FFA6 - MooH&lt;br /&gt;
         FFA7 - MooH&lt;br /&gt;
         FFA8 - MooH&lt;br /&gt;
         FFA9 - MooH&lt;br /&gt;
         FFAA - MooH&lt;br /&gt;
         FFAB - MooH&lt;br /&gt;
         FFAC - MooH&lt;br /&gt;
         FFAD - MooH&lt;br /&gt;
         FFAE - MooH&lt;br /&gt;
         FFAF - MooH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
65471    FFBF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9685</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9685"/>
		<updated>2021-05-28T19:23:00Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| Paper manual&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| &lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC CMD_REG&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Read data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Write data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56&lt;br /&gt;
| Dragon MMC ???&lt;br /&gt;
| &lt;br /&gt;
| Dragon MMC ??? &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF56-FF5E&lt;br /&gt;
| Dragon-MSX2+&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DIY PROJECTS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         FF50 - DragonMMC&lt;br /&gt;
         FF54 - DragonMMC&lt;br /&gt;
         FF56 - Dragon-MSX2+ | DragonMMC&lt;br /&gt;
         FF57 - Dragon-MSX2+&lt;br /&gt;
         FF58 - Dragon-MSX2+&lt;br /&gt;
         FF59 - Dragon-MSX2+&lt;br /&gt;
         FF5A - Dragon-MSX2+&lt;br /&gt;
         FF5B - Dragon-MSX2+&lt;br /&gt;
         FF5C - Dragon-MSX2+&lt;br /&gt;
         FF5D - Dragon-MSX2+&lt;br /&gt;
         FF5E - Dragon MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF76 - Dragon-MSX2+&lt;br /&gt;
         FF77 - Dragon-MSX2+&lt;br /&gt;
         FF78 - Dragon-MSX2+&lt;br /&gt;
         FF79 - Dragon-MSX2+&lt;br /&gt;
         FF7A - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7B - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7C - Dragon-MSX2+&lt;br /&gt;
         FF7D - Dragon-MSX2+&lt;br /&gt;
         FF7E - Dragon-MSX2+&lt;br /&gt;
         FF7F - Mega-Mini MPI | DOSPlus Extended&lt;br /&gt;
&lt;br /&gt;
         FF90 - MooH&lt;br /&gt;
         FF91 - MooH&lt;br /&gt;
         FFA0 - MooH&lt;br /&gt;
         FFA1 - MooH&lt;br /&gt;
         FFA2 - MooH&lt;br /&gt;
         FFA3 - MooH&lt;br /&gt;
         FFA4 - MooH&lt;br /&gt;
         FFA5 - MooH&lt;br /&gt;
         FFA6 - MooH&lt;br /&gt;
         FFA7 - MooH&lt;br /&gt;
         FFA8 - MooH&lt;br /&gt;
         FFA9 - MooH&lt;br /&gt;
         FFAA - MooH&lt;br /&gt;
         FFAB - MooH&lt;br /&gt;
         FFAC - MooH&lt;br /&gt;
         FFAD - MooH&lt;br /&gt;
         FFAE - MooH&lt;br /&gt;
         FFAF - MooH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
65471    FFBF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9684</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9684"/>
		<updated>2021-05-28T19:21:50Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FFEF&lt;br /&gt;
| [[RACE Computer Expansion Cage]]&lt;br /&gt;
| Paper manual&lt;br /&gt;
| TO BE CONFIRMED&lt;br /&gt;
| Bits 0-1 : slot selection&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| &lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC CMD_REG&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF51&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF52&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Read data reg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF53&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| Dragon MMC Write data reg&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DIY PROJECTS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         FF50 - DragonMMC&lt;br /&gt;
         FF54 - DragonMMC&lt;br /&gt;
         FF56 - Dragon-MSX2+ | DragonMMC&lt;br /&gt;
         FF57 - Dragon-MSX2+&lt;br /&gt;
         FF58 - Dragon-MSX2+&lt;br /&gt;
         FF59 - Dragon-MSX2+&lt;br /&gt;
         FF5A - Dragon-MSX2+&lt;br /&gt;
         FF5B - Dragon-MSX2+&lt;br /&gt;
         FF5C - Dragon-MSX2+&lt;br /&gt;
         FF5D - Dragon-MSX2+&lt;br /&gt;
         FF5E - Dragon MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF76 - Dragon-MSX2+&lt;br /&gt;
         FF77 - Dragon-MSX2+&lt;br /&gt;
         FF78 - Dragon-MSX2+&lt;br /&gt;
         FF79 - Dragon-MSX2+&lt;br /&gt;
         FF7A - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7B - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7C - Dragon-MSX2+&lt;br /&gt;
         FF7D - Dragon-MSX2+&lt;br /&gt;
         FF7E - Dragon-MSX2+&lt;br /&gt;
         FF7F - Mega-Mini MPI | DOSPlus Extended&lt;br /&gt;
&lt;br /&gt;
         FF90 - MooH&lt;br /&gt;
         FF91 - MooH&lt;br /&gt;
         FFA0 - MooH&lt;br /&gt;
         FFA1 - MooH&lt;br /&gt;
         FFA2 - MooH&lt;br /&gt;
         FFA3 - MooH&lt;br /&gt;
         FFA4 - MooH&lt;br /&gt;
         FFA5 - MooH&lt;br /&gt;
         FFA6 - MooH&lt;br /&gt;
         FFA7 - MooH&lt;br /&gt;
         FFA8 - MooH&lt;br /&gt;
         FFA9 - MooH&lt;br /&gt;
         FFAA - MooH&lt;br /&gt;
         FFAB - MooH&lt;br /&gt;
         FFAC - MooH&lt;br /&gt;
         FFAD - MooH&lt;br /&gt;
         FFAE - MooH&lt;br /&gt;
         FFAF - MooH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
65471    FFBF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9683</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9683"/>
		<updated>2021-05-28T19:18:25Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| &lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF50&lt;br /&gt;
| Dragon MMC&lt;br /&gt;
| https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm , https://github.com/prime6809/DragonMMC/blob/master/DragonFirmware/defs/mmc2def.asm&lt;br /&gt;
| CMD_REG&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DIY PROJECTS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         FF50 - DragonMMC&lt;br /&gt;
         FF54 - DragonMMC&lt;br /&gt;
         FF56 - Dragon-MSX2+ | DragonMMC&lt;br /&gt;
         FF57 - Dragon-MSX2+&lt;br /&gt;
         FF58 - Dragon-MSX2+&lt;br /&gt;
         FF59 - Dragon-MSX2+&lt;br /&gt;
         FF5A - Dragon-MSX2+&lt;br /&gt;
         FF5B - Dragon-MSX2+&lt;br /&gt;
         FF5C - Dragon-MSX2+&lt;br /&gt;
         FF5D - Dragon-MSX2+&lt;br /&gt;
         FF5E - Dragon MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF76 - Dragon-MSX2+&lt;br /&gt;
         FF77 - Dragon-MSX2+&lt;br /&gt;
         FF78 - Dragon-MSX2+&lt;br /&gt;
         FF79 - Dragon-MSX2+&lt;br /&gt;
         FF7A - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7B - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7C - Dragon-MSX2+&lt;br /&gt;
         FF7D - Dragon-MSX2+&lt;br /&gt;
         FF7E - Dragon-MSX2+&lt;br /&gt;
         FF7F - Mega-Mini MPI | DOSPlus Extended&lt;br /&gt;
&lt;br /&gt;
         FF90 - MooH&lt;br /&gt;
         FF91 - MooH&lt;br /&gt;
         FFA0 - MooH&lt;br /&gt;
         FFA1 - MooH&lt;br /&gt;
         FFA2 - MooH&lt;br /&gt;
         FFA3 - MooH&lt;br /&gt;
         FFA4 - MooH&lt;br /&gt;
         FFA5 - MooH&lt;br /&gt;
         FFA6 - MooH&lt;br /&gt;
         FFA7 - MooH&lt;br /&gt;
         FFA8 - MooH&lt;br /&gt;
         FFA9 - MooH&lt;br /&gt;
         FFAA - MooH&lt;br /&gt;
         FFAB - MooH&lt;br /&gt;
         FFAC - MooH&lt;br /&gt;
         FFAD - MooH&lt;br /&gt;
         FFAE - MooH&lt;br /&gt;
         FFAF - MooH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
65471    FFBF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9682</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9682"/>
		<updated>2021-05-28T19:10:12Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* DISK CONTROLLERS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| &lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DIY PROJECTS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         FF50 - DragonMMC&lt;br /&gt;
         FF54 - DragonMMC&lt;br /&gt;
         FF56 - Dragon-MSX2+ | DragonMMC&lt;br /&gt;
         FF57 - Dragon-MSX2+&lt;br /&gt;
         FF58 - Dragon-MSX2+&lt;br /&gt;
         FF59 - Dragon-MSX2+&lt;br /&gt;
         FF5A - Dragon-MSX2+&lt;br /&gt;
         FF5B - Dragon-MSX2+&lt;br /&gt;
         FF5C - Dragon-MSX2+&lt;br /&gt;
         FF5D - Dragon-MSX2+&lt;br /&gt;
         FF5E - Dragon MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF76 - Dragon-MSX2+&lt;br /&gt;
         FF77 - Dragon-MSX2+&lt;br /&gt;
         FF78 - Dragon-MSX2+&lt;br /&gt;
         FF79 - Dragon-MSX2+&lt;br /&gt;
         FF7A - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7B - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7C - Dragon-MSX2+&lt;br /&gt;
         FF7D - Dragon-MSX2+&lt;br /&gt;
         FF7E - Dragon-MSX2+&lt;br /&gt;
         FF7F - Mega-Mini MPI | DOSPlus Extended&lt;br /&gt;
&lt;br /&gt;
         FF90 - MooH&lt;br /&gt;
         FF91 - MooH&lt;br /&gt;
         FFA0 - MooH&lt;br /&gt;
         FFA1 - MooH&lt;br /&gt;
         FFA2 - MooH&lt;br /&gt;
         FFA3 - MooH&lt;br /&gt;
         FFA4 - MooH&lt;br /&gt;
         FFA5 - MooH&lt;br /&gt;
         FFA6 - MooH&lt;br /&gt;
         FFA7 - MooH&lt;br /&gt;
         FFA8 - MooH&lt;br /&gt;
         FFA9 - MooH&lt;br /&gt;
         FFAA - MooH&lt;br /&gt;
         FFAB - MooH&lt;br /&gt;
         FFAC - MooH&lt;br /&gt;
         FFAD - MooH&lt;br /&gt;
         FFAE - MooH&lt;br /&gt;
         FFAF - MooH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
65471    FFBF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9681</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9681"/>
		<updated>2021-05-28T19:09:28Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24-FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
|-&lt;br /&gt;
| FF2C-FF2F&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha Floppy Disk Controller&lt;br /&gt;
|-&lt;br /&gt;
| FF40&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF41&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF42&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
* Becker Port (DriveWire)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF43&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
* CocoSDC&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF48&lt;br /&gt;
|&lt;br /&gt;
* Dragon FDC&lt;br /&gt;
* Coco FDC&lt;br /&gt;
| &lt;br /&gt;
| Disk controller latch&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DISK CONTROLLERS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         FF2C - Dragon Alpha FDC&lt;br /&gt;
         FF2D - Dragon Alpha FDC&lt;br /&gt;
         FF2E - Dragon Alpha FDC&lt;br /&gt;
         FF2F - Dragon Alpha FDC&lt;br /&gt;
&lt;br /&gt;
         FF40 - Dragon FDC | CoCo FDC | CoCo SDC&lt;br /&gt;
         FF41 - Dragon FDC | CoCo FDC | CoCo SDC | Becker Port (DriveWire)&lt;br /&gt;
         FF42 - Dragon FDC | CoCo FDC | CoCo SDC | Becker Port (DriveWire)&lt;br /&gt;
         FF43 - Dragon FDC | CoCo FDC | CoCo SDC&lt;br /&gt;
         FF48 - Latch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIY PROJECTS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         FF50 - DragonMMC&lt;br /&gt;
         FF54 - DragonMMC&lt;br /&gt;
         FF56 - Dragon-MSX2+ | DragonMMC&lt;br /&gt;
         FF57 - Dragon-MSX2+&lt;br /&gt;
         FF58 - Dragon-MSX2+&lt;br /&gt;
         FF59 - Dragon-MSX2+&lt;br /&gt;
         FF5A - Dragon-MSX2+&lt;br /&gt;
         FF5B - Dragon-MSX2+&lt;br /&gt;
         FF5C - Dragon-MSX2+&lt;br /&gt;
         FF5D - Dragon-MSX2+&lt;br /&gt;
         FF5E - Dragon MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF76 - Dragon-MSX2+&lt;br /&gt;
         FF77 - Dragon-MSX2+&lt;br /&gt;
         FF78 - Dragon-MSX2+&lt;br /&gt;
         FF79 - Dragon-MSX2+&lt;br /&gt;
         FF7A - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7B - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7C - Dragon-MSX2+&lt;br /&gt;
         FF7D - Dragon-MSX2+&lt;br /&gt;
         FF7E - Dragon-MSX2+&lt;br /&gt;
         FF7F - Mega-Mini MPI | DOSPlus Extended&lt;br /&gt;
&lt;br /&gt;
         FF90 - MooH&lt;br /&gt;
         FF91 - MooH&lt;br /&gt;
         FFA0 - MooH&lt;br /&gt;
         FFA1 - MooH&lt;br /&gt;
         FFA2 - MooH&lt;br /&gt;
         FFA3 - MooH&lt;br /&gt;
         FFA4 - MooH&lt;br /&gt;
         FFA5 - MooH&lt;br /&gt;
         FFA6 - MooH&lt;br /&gt;
         FFA7 - MooH&lt;br /&gt;
         FFA8 - MooH&lt;br /&gt;
         FFA9 - MooH&lt;br /&gt;
         FFAA - MooH&lt;br /&gt;
         FFAB - MooH&lt;br /&gt;
         FFAC - MooH&lt;br /&gt;
         FFAD - MooH&lt;br /&gt;
         FFAE - MooH&lt;br /&gt;
         FFAF - MooH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
65471    FFBF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9680</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9680"/>
		<updated>2021-05-28T19:05:09Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF25&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF26&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DISK CONTROLLERS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         FF2C - Dragon Alpha FDC&lt;br /&gt;
         FF2D - Dragon Alpha FDC&lt;br /&gt;
         FF2E - Dragon Alpha FDC&lt;br /&gt;
         FF2F - Dragon Alpha FDC&lt;br /&gt;
&lt;br /&gt;
         FF40 - Dragon FDC | CoCo FDC | CoCo SDC&lt;br /&gt;
         FF41 - Dragon FDC | CoCo FDC | CoCo SDC | Becker Port (DriveWire)&lt;br /&gt;
         FF42 - Dragon FDC | CoCo FDC | CoCo SDC | Becker Port (DriveWire)&lt;br /&gt;
         FF43 - Dragon FDC | CoCo FDC | CoCo SDC&lt;br /&gt;
         FF48 - Latch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIY PROJECTS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         FF50 - DragonMMC&lt;br /&gt;
         FF54 - DragonMMC&lt;br /&gt;
         FF56 - Dragon-MSX2+ | DragonMMC&lt;br /&gt;
         FF57 - Dragon-MSX2+&lt;br /&gt;
         FF58 - Dragon-MSX2+&lt;br /&gt;
         FF59 - Dragon-MSX2+&lt;br /&gt;
         FF5A - Dragon-MSX2+&lt;br /&gt;
         FF5B - Dragon-MSX2+&lt;br /&gt;
         FF5C - Dragon-MSX2+&lt;br /&gt;
         FF5D - Dragon-MSX2+&lt;br /&gt;
         FF5E - Dragon MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF76 - Dragon-MSX2+&lt;br /&gt;
         FF77 - Dragon-MSX2+&lt;br /&gt;
         FF78 - Dragon-MSX2+&lt;br /&gt;
         FF79 - Dragon-MSX2+&lt;br /&gt;
         FF7A - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7B - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7C - Dragon-MSX2+&lt;br /&gt;
         FF7D - Dragon-MSX2+&lt;br /&gt;
         FF7E - Dragon-MSX2+&lt;br /&gt;
         FF7F - Mega-Mini MPI | DOSPlus Extended&lt;br /&gt;
&lt;br /&gt;
         FF90 - MooH&lt;br /&gt;
         FF91 - MooH&lt;br /&gt;
         FFA0 - MooH&lt;br /&gt;
         FFA1 - MooH&lt;br /&gt;
         FFA2 - MooH&lt;br /&gt;
         FFA3 - MooH&lt;br /&gt;
         FFA4 - MooH&lt;br /&gt;
         FFA5 - MooH&lt;br /&gt;
         FFA6 - MooH&lt;br /&gt;
         FFA7 - MooH&lt;br /&gt;
         FFA8 - MooH&lt;br /&gt;
         FFA9 - MooH&lt;br /&gt;
         FFAA - MooH&lt;br /&gt;
         FFAB - MooH&lt;br /&gt;
         FFAC - MooH&lt;br /&gt;
         FFAD - MooH&lt;br /&gt;
         FFAE - MooH&lt;br /&gt;
         FFAF - MooH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
65471    FFBF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9679</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9679"/>
		<updated>2021-05-28T19:04:11Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Addr&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF20&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - cassette data input&lt;br /&gt;
* Bit 1 - RS232 data output&lt;br /&gt;
* Bits 2-7 :  6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
|-&lt;br /&gt;
| FF21&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side A control register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 - control of CD : 0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
* Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
* Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
* Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
* Bit 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - CD interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF22&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B data register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - RS 232 data input&lt;br /&gt;
* Bit 1 - single bit cound output&lt;br /&gt;
* Bit 2 - RAM size input&lt;br /&gt;
* Bit 3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
* Bit 4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
* Bit 5 - VDG Cont Output GM1&lt;br /&gt;
* Bit 6 - VDG Cont Output GM2&lt;br /&gt;
* Bit 7 - VDG Cont Output NOT(A)/G &lt;br /&gt;
|-&lt;br /&gt;
| FF23&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 1 side B control register &lt;br /&gt;
|&lt;br /&gt;
* Bit 0 - control of cartridge,  0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
* Bit 1 - Interrupt input, 0=sets flag on falling edge of cartridge, 1=sets flag on rising edge of cartridge&lt;br /&gt;
* Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
* Bit 3 - 6 bit sound enable&lt;br /&gt;
* Bits 4,5 - always 1&lt;br /&gt;
* Bit 6 - not used&lt;br /&gt;
* Bit 7 - cartridge interrupt flag&lt;br /&gt;
|-&lt;br /&gt;
| FF24&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF25&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF26&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF27&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha PIA&lt;br /&gt;
|-&lt;br /&gt;
| FF28&lt;br /&gt;
| Dragon Alpha&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Dragon Alpha 6850 Modem Port&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65316    FF24 - Dragon Alpha PIA&lt;br /&gt;
         FF25 - Dragon Alpha PIA&lt;br /&gt;
         FF26 - Dragon Alpha PIA&lt;br /&gt;
         FF27 - Dragon Alpha PIA&lt;br /&gt;
         FF28 - Dragon Alpha 6850 Modem Port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DISK CONTROLLERS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         FF2C - Dragon Alpha FDC&lt;br /&gt;
         FF2D - Dragon Alpha FDC&lt;br /&gt;
         FF2E - Dragon Alpha FDC&lt;br /&gt;
         FF2F - Dragon Alpha FDC&lt;br /&gt;
&lt;br /&gt;
         FF40 - Dragon FDC | CoCo FDC | CoCo SDC&lt;br /&gt;
         FF41 - Dragon FDC | CoCo FDC | CoCo SDC | Becker Port (DriveWire)&lt;br /&gt;
         FF42 - Dragon FDC | CoCo FDC | CoCo SDC | Becker Port (DriveWire)&lt;br /&gt;
         FF43 - Dragon FDC | CoCo FDC | CoCo SDC&lt;br /&gt;
         FF48 - Latch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIY PROJECTS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         FF50 - DragonMMC&lt;br /&gt;
         FF54 - DragonMMC&lt;br /&gt;
         FF56 - Dragon-MSX2+ | DragonMMC&lt;br /&gt;
         FF57 - Dragon-MSX2+&lt;br /&gt;
         FF58 - Dragon-MSX2+&lt;br /&gt;
         FF59 - Dragon-MSX2+&lt;br /&gt;
         FF5A - Dragon-MSX2+&lt;br /&gt;
         FF5B - Dragon-MSX2+&lt;br /&gt;
         FF5C - Dragon-MSX2+&lt;br /&gt;
         FF5D - Dragon-MSX2+&lt;br /&gt;
         FF5E - Dragon MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF76 - Dragon-MSX2+&lt;br /&gt;
         FF77 - Dragon-MSX2+&lt;br /&gt;
         FF78 - Dragon-MSX2+&lt;br /&gt;
         FF79 - Dragon-MSX2+&lt;br /&gt;
         FF7A - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7B - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7C - Dragon-MSX2+&lt;br /&gt;
         FF7D - Dragon-MSX2+&lt;br /&gt;
         FF7E - Dragon-MSX2+&lt;br /&gt;
         FF7F - Mega-Mini MPI | DOSPlus Extended&lt;br /&gt;
&lt;br /&gt;
         FF90 - MooH&lt;br /&gt;
         FF91 - MooH&lt;br /&gt;
         FFA0 - MooH&lt;br /&gt;
         FFA1 - MooH&lt;br /&gt;
         FFA2 - MooH&lt;br /&gt;
         FFA3 - MooH&lt;br /&gt;
         FFA4 - MooH&lt;br /&gt;
         FFA5 - MooH&lt;br /&gt;
         FFA6 - MooH&lt;br /&gt;
         FFA7 - MooH&lt;br /&gt;
         FFA8 - MooH&lt;br /&gt;
         FFA9 - MooH&lt;br /&gt;
         FFAA - MooH&lt;br /&gt;
         FFAB - MooH&lt;br /&gt;
         FFAC - MooH&lt;br /&gt;
         FFAD - MooH&lt;br /&gt;
         FFAE - MooH&lt;br /&gt;
         FFAF - MooH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
65471    FFBF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9678</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9678"/>
		<updated>2021-05-28T18:51:02Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Hex&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Decimal&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| 65280&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| 65281&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| 65282&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| 65283&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| 65284&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| 65285&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| 65286&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| 65287&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
65312   FF20    Bit 0 - cassette data input&lt;br /&gt;
                    1 - RS232 data output&lt;br /&gt;
                    2/7 - 6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
65313   FF21    Bit 0 - control of CD&lt;br /&gt;
                0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
                Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
                Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
                Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
                    4 - always 1&lt;br /&gt;
                    5 - always 1&lt;br /&gt;
                    6 - not used&lt;br /&gt;
                    7 - CD interrupt flag&lt;br /&gt;
65314   FF22    Bit 0 - RS 232 data input&lt;br /&gt;
                    1 - single bit cound output&lt;br /&gt;
                    2 - RAM size input&lt;br /&gt;
                    3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
                    4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
                    5 - VDG Cont Output GM1&lt;br /&gt;
                    6 - VDG Cont Output GM2&lt;br /&gt;
                    7 - VDG Cont Output NOT(A)/G&lt;br /&gt;
65315   FF23    (Coco) POKE 54 to disable auto exec of cartridge&lt;br /&gt;
                POKE 55 to enable auto execute of cartridge&lt;br /&gt;
                Not certain re above for Dragon&lt;br /&gt;
                Bit 0 - control of cartridge&lt;br /&gt;
                0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
                Bit 1 - Interrupt input&lt;br /&gt;
                0=sets flag on falling edge of cartridge&lt;br /&gt;
                1=sets flag on rising edge of cartridge&lt;br /&gt;
                Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
                    3 - 6 bit sound enable&lt;br /&gt;
                    4 - always 1&lt;br /&gt;
                    5 - always 1&lt;br /&gt;
                    6 - not used&lt;br /&gt;
                    7 - Cartridge Interrupt Flag&lt;br /&gt;
65316    FF24 - Dragon Alpha PIA&lt;br /&gt;
         FF25 - Dragon Alpha PIA&lt;br /&gt;
         FF26 - Dragon Alpha PIA&lt;br /&gt;
         FF27 - Dragon Alpha PIA&lt;br /&gt;
         FF28 - Dragon Alpha 6850 Modem Port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DISK CONTROLLERS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         FF2C - Dragon Alpha FDC&lt;br /&gt;
         FF2D - Dragon Alpha FDC&lt;br /&gt;
         FF2E - Dragon Alpha FDC&lt;br /&gt;
         FF2F - Dragon Alpha FDC&lt;br /&gt;
&lt;br /&gt;
         FF40 - Dragon FDC | CoCo FDC | CoCo SDC&lt;br /&gt;
         FF41 - Dragon FDC | CoCo FDC | CoCo SDC | Becker Port (DriveWire)&lt;br /&gt;
         FF42 - Dragon FDC | CoCo FDC | CoCo SDC | Becker Port (DriveWire)&lt;br /&gt;
         FF43 - Dragon FDC | CoCo FDC | CoCo SDC&lt;br /&gt;
         FF48 - Latch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIY PROJECTS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         FF50 - DragonMMC&lt;br /&gt;
         FF54 - DragonMMC&lt;br /&gt;
         FF56 - Dragon-MSX2+ | DragonMMC&lt;br /&gt;
         FF57 - Dragon-MSX2+&lt;br /&gt;
         FF58 - Dragon-MSX2+&lt;br /&gt;
         FF59 - Dragon-MSX2+&lt;br /&gt;
         FF5A - Dragon-MSX2+&lt;br /&gt;
         FF5B - Dragon-MSX2+&lt;br /&gt;
         FF5C - Dragon-MSX2+&lt;br /&gt;
         FF5D - Dragon-MSX2+&lt;br /&gt;
         FF5E - Dragon MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF76 - Dragon-MSX2+&lt;br /&gt;
         FF77 - Dragon-MSX2+&lt;br /&gt;
         FF78 - Dragon-MSX2+&lt;br /&gt;
         FF79 - Dragon-MSX2+&lt;br /&gt;
         FF7A - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7B - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7C - Dragon-MSX2+&lt;br /&gt;
         FF7D - Dragon-MSX2+&lt;br /&gt;
         FF7E - Dragon-MSX2+&lt;br /&gt;
         FF7F - Mega-Mini MPI | DOSPlus Extended&lt;br /&gt;
&lt;br /&gt;
         FF90 - MooH&lt;br /&gt;
         FF91 - MooH&lt;br /&gt;
         FFA0 - MooH&lt;br /&gt;
         FFA1 - MooH&lt;br /&gt;
         FFA2 - MooH&lt;br /&gt;
         FFA3 - MooH&lt;br /&gt;
         FFA4 - MooH&lt;br /&gt;
         FFA5 - MooH&lt;br /&gt;
         FFA6 - MooH&lt;br /&gt;
         FFA7 - MooH&lt;br /&gt;
         FFA8 - MooH&lt;br /&gt;
         FFA9 - MooH&lt;br /&gt;
         FFAA - MooH&lt;br /&gt;
         FFAB - MooH&lt;br /&gt;
         FFAC - MooH&lt;br /&gt;
         FFAD - MooH&lt;br /&gt;
         FFAE - MooH&lt;br /&gt;
         FFAF - MooH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
65471    FFBF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9677</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9677"/>
		<updated>2021-05-28T18:50:17Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ADDRESSES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Hex&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Decimal&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Device&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Reference&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Comments&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Bit by bit&lt;br /&gt;
|-&lt;br /&gt;
| FF00&lt;br /&gt;
| 65280&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
|&lt;br /&gt;
* https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
* http://www.dragondata.co.uk/Publications/InsideTheDragon.pdf - p. 196&lt;br /&gt;
| PIA 0 side A data register &lt;br /&gt;
| &lt;br /&gt;
* Bit 0 right joystick button&lt;br /&gt;
* Bit 1 left joystick button&lt;br /&gt;
* Bits 0 to 6 Keyboard row input&lt;br /&gt;
* Bit 7 joystick comparator input&lt;br /&gt;
|-&lt;br /&gt;
| FF01&lt;br /&gt;
| 65281&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side A control register&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| FF02&lt;br /&gt;
| 65282&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B data register&lt;br /&gt;
| Bits 0 to 7: keyboard column output&lt;br /&gt;
|-&lt;br /&gt;
| FF03&lt;br /&gt;
| 65283&lt;br /&gt;
| &lt;br /&gt;
* Dragon 32&lt;br /&gt;
* Dragon 64&lt;br /&gt;
| https://www.lomont.org/software/misc/coco/Lomont_CoCoHardware.pdf - p.48&lt;br /&gt;
| PIA 0 side B control register&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF04&lt;br /&gt;
| 65284&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF05&lt;br /&gt;
| 65285&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF06&lt;br /&gt;
| 65286&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| FF07&lt;br /&gt;
| 65287&lt;br /&gt;
| &lt;br /&gt;
* Dragon 64&lt;br /&gt;
* Dragon Alpha&lt;br /&gt;
|&lt;br /&gt;
| ACIA&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65280   FF00    Bits 0 to 6 Keyboard row input&lt;br /&gt;
                Bit 7 joystick comparator input&lt;br /&gt;
        FF01    PIA&lt;br /&gt;
65282   FF02    Bits 0 to 7 keyboard column output&lt;br /&gt;
        FF03    PIA&lt;br /&gt;
        FF04    ACIA - D64/Alpha&lt;br /&gt;
        FF05    ACIA - D64/Alpha&lt;br /&gt;
        FF06    ACIA - D64/Alpha&lt;br /&gt;
        FF07    ACIA - D64/Alpha&lt;br /&gt;
&lt;br /&gt;
65312   FF20    Bit 0 - cassette data input&lt;br /&gt;
                    1 - RS232 data output&lt;br /&gt;
                    2/7 - 6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
65313   FF21    Bit 0 - control of CD&lt;br /&gt;
                0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
                Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
                Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
                Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
                    4 - always 1&lt;br /&gt;
                    5 - always 1&lt;br /&gt;
                    6 - not used&lt;br /&gt;
                    7 - CD interrupt flag&lt;br /&gt;
65314   FF22    Bit 0 - RS 232 data input&lt;br /&gt;
                    1 - single bit cound output&lt;br /&gt;
                    2 - RAM size input&lt;br /&gt;
                    3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
                    4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
                    5 - VDG Cont Output GM1&lt;br /&gt;
                    6 - VDG Cont Output GM2&lt;br /&gt;
                    7 - VDG Cont Output NOT(A)/G&lt;br /&gt;
65315   FF23    (Coco) POKE 54 to disable auto exec of cartridge&lt;br /&gt;
                POKE 55 to enable auto execute of cartridge&lt;br /&gt;
                Not certain re above for Dragon&lt;br /&gt;
                Bit 0 - control of cartridge&lt;br /&gt;
                0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
                Bit 1 - Interrupt input&lt;br /&gt;
                0=sets flag on falling edge of cartridge&lt;br /&gt;
                1=sets flag on rising edge of cartridge&lt;br /&gt;
                Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
                    3 - 6 bit sound enable&lt;br /&gt;
                    4 - always 1&lt;br /&gt;
                    5 - always 1&lt;br /&gt;
                    6 - not used&lt;br /&gt;
                    7 - Cartridge Interrupt Flag&lt;br /&gt;
65316    FF24 - Dragon Alpha PIA&lt;br /&gt;
         FF25 - Dragon Alpha PIA&lt;br /&gt;
         FF26 - Dragon Alpha PIA&lt;br /&gt;
         FF27 - Dragon Alpha PIA&lt;br /&gt;
         FF28 - Dragon Alpha 6850 Modem Port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DISK CONTROLLERS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         FF2C - Dragon Alpha FDC&lt;br /&gt;
         FF2D - Dragon Alpha FDC&lt;br /&gt;
         FF2E - Dragon Alpha FDC&lt;br /&gt;
         FF2F - Dragon Alpha FDC&lt;br /&gt;
&lt;br /&gt;
         FF40 - Dragon FDC | CoCo FDC | CoCo SDC&lt;br /&gt;
         FF41 - Dragon FDC | CoCo FDC | CoCo SDC | Becker Port (DriveWire)&lt;br /&gt;
         FF42 - Dragon FDC | CoCo FDC | CoCo SDC | Becker Port (DriveWire)&lt;br /&gt;
         FF43 - Dragon FDC | CoCo FDC | CoCo SDC&lt;br /&gt;
         FF48 - Latch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIY PROJECTS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         FF50 - DragonMMC&lt;br /&gt;
         FF54 - DragonMMC&lt;br /&gt;
         FF56 - Dragon-MSX2+ | DragonMMC&lt;br /&gt;
         FF57 - Dragon-MSX2+&lt;br /&gt;
         FF58 - Dragon-MSX2+&lt;br /&gt;
         FF59 - Dragon-MSX2+&lt;br /&gt;
         FF5A - Dragon-MSX2+&lt;br /&gt;
         FF5B - Dragon-MSX2+&lt;br /&gt;
         FF5C - Dragon-MSX2+&lt;br /&gt;
         FF5D - Dragon-MSX2+&lt;br /&gt;
         FF5E - Dragon MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF76 - Dragon-MSX2+&lt;br /&gt;
         FF77 - Dragon-MSX2+&lt;br /&gt;
         FF78 - Dragon-MSX2+&lt;br /&gt;
         FF79 - Dragon-MSX2+&lt;br /&gt;
         FF7A - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7B - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7C - Dragon-MSX2+&lt;br /&gt;
         FF7D - Dragon-MSX2+&lt;br /&gt;
         FF7E - Dragon-MSX2+&lt;br /&gt;
         FF7F - Mega-Mini MPI | DOSPlus Extended&lt;br /&gt;
&lt;br /&gt;
         FF90 - MooH&lt;br /&gt;
         FF91 - MooH&lt;br /&gt;
         FFA0 - MooH&lt;br /&gt;
         FFA1 - MooH&lt;br /&gt;
         FFA2 - MooH&lt;br /&gt;
         FFA3 - MooH&lt;br /&gt;
         FFA4 - MooH&lt;br /&gt;
         FFA5 - MooH&lt;br /&gt;
         FFA6 - MooH&lt;br /&gt;
         FFA7 - MooH&lt;br /&gt;
         FFA8 - MooH&lt;br /&gt;
         FFA9 - MooH&lt;br /&gt;
         FFAA - MooH&lt;br /&gt;
         FFAB - MooH&lt;br /&gt;
         FFAC - MooH&lt;br /&gt;
         FFAD - MooH&lt;br /&gt;
         FFAE - MooH&lt;br /&gt;
         FFAF - MooH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
65471    FFBF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
	<entry>
		<id>https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9675</id>
		<title>Memory Map</title>
		<link rel="alternate" type="text/html" href="https://www.worldofdragon.org/index.php?title=Memory_Map&amp;diff=9675"/>
		<updated>2021-05-28T18:15:57Z</updated>

		<summary type="html">&lt;p&gt;Maestrosoftware: /* INPUT/OUTPUT ROUTINES */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MEMORY MAP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DRAGON 32 and 64 in 32 mode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    0 -  1023  0000 - 03FF      SYSTEM USE&lt;br /&gt;
 1024 -  1535  0400 - 05FF      TEXT SCREEN&lt;br /&gt;
 1536 -  3071  0600 - 0BFF      GRAPHICS: PAGE 1&lt;br /&gt;
 3072 -  4607  0C00 - 11FF                PAGE 2&lt;br /&gt;
 4608 -  6143  1200 - 17FF                PAGE 3&lt;br /&gt;
 6144 -  7679  1800 - 1DFF                PAGE 4&lt;br /&gt;
 7680 -  9215  1E00 - 23FF                PAGE 5&lt;br /&gt;
 9216 - 10751  2400 - 29FF                PAGE 6&lt;br /&gt;
10752 - 12287  2A00 - 2FFF                PAGE 7&lt;br /&gt;
12288 - 13823  3000 - 35FF                PAGE 8&lt;br /&gt;
13824 - 32767  3600 - 7FFF      PROGRAM USE&lt;br /&gt;
32768 - 49151  8000 - BFFF      BASIC ROM&lt;br /&gt;
49152 - 65279  C000 - FEFF      CARTRIDGE USE&lt;br /&gt;
65280 - 65535  FF00 - FFFF      INPUT/OUTPUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLEASE NOTE:&lt;br /&gt;
With disks in use, the Disk work space occupies the first&lt;br /&gt;
page of graphics (1536 to 3071) and in consequence Graphics&lt;br /&gt;
screens are moved up one page, starting at 3072 (&amp;amp;H0C00) and&lt;br /&gt;
ending at 15359 (&amp;amp;H3BFF).&lt;br /&gt;
On start up the Dragon does a PCLEAR4 and in consequence the&lt;br /&gt;
memory available for program use starts at 7680, or 9216&lt;br /&gt;
with the DOS Controller in place.&lt;br /&gt;
&lt;br /&gt;
DRAGON 64 in 64 MODE.&lt;br /&gt;
&lt;br /&gt;
Same as above, except the BASIC ROM is moved from 32768&lt;br /&gt;
(&amp;amp;H8000) to 49152 (&amp;amp;HC000), which gives a substantial&lt;br /&gt;
increase in memory available for program use, but means that&lt;br /&gt;
disks cannot be used as the ROM overlays the Cartridge area.&lt;br /&gt;
Programs exist to overcome this problem however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;13824 - 49151  3600 - BFFF      PROGRAM USE&lt;br /&gt;
49152 - 65279  C000 - FEFF      BASIC ROM&lt;br /&gt;
65280 - 65375  FF00 - FF5F      INPUT/OUTPUT&lt;br /&gt;
65376 - 65503  FF60 - FFDF      SAM CONTROL BITS&lt;br /&gt;
65504 - 65535  FFE0 - FFFF      MPU VECTORS&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE&lt;br /&gt;
&lt;br /&gt;
The following pages contain details of the Dragon&amp;#039;s memory,&lt;br /&gt;
both the Basic work pages and the Basic ROM. While every&lt;br /&gt;
effort has been made to ensure the accuracy of these&lt;br /&gt;
details, the Editor has had to rely on a number of sources&lt;br /&gt;
and it has not been possible to check them all.&lt;br /&gt;
Where possible details have also been given of the Tandy&lt;br /&gt;
Coco2 equivalent, making it possible for the conversion of&lt;br /&gt;
programs from American sources. In so doing you are reminded&lt;br /&gt;
that the Coco disk system differs greatly from Dragondos and&lt;br /&gt;
is closer to the cassette system in the way that it handles&lt;br /&gt;
data files.&lt;br /&gt;
One other major difference is the way that graphic binary&lt;br /&gt;
files are stored, they are usually 512 bytes higher in&lt;br /&gt;
memory than Dragon graphics.&lt;br /&gt;
&lt;br /&gt;
== MEMORY MAP DETAILS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0       0       BREAK message flag&lt;br /&gt;
1       1       STRING delimiting character&lt;br /&gt;
2       2       Another delimiting character&lt;br /&gt;
3       3       General counter&lt;br /&gt;
4       4       Count of IF&amp;#039;s seen looking for ELSE&lt;br /&gt;
5       5       DIM flag&lt;br /&gt;
6       6       VARIABLE type flag 0=numeric 255=string&lt;br /&gt;
7       7       Garbage collection flag&lt;br /&gt;
8       8       Subscript allowed flag&lt;br /&gt;
9       9       INPUT/READ flag&lt;br /&gt;
10      A       Arithmetic use&lt;br /&gt;
11)     B)      String pointer - first free temporary&lt;br /&gt;
12)     C)&lt;br /&gt;
13)     D)      String pointer - last used temporory&lt;br /&gt;
15-24   E-18    Temporary results&lt;br /&gt;
25/26   19/1A   Start address of Basic program&lt;br /&gt;
27/28   1B/1C   Start address of simple variables table&lt;br /&gt;
                see D User 1/86 p38 for details of&lt;br /&gt;
                variables.&lt;br /&gt;
29/30   1D/1E   Start address of ARRAY table&lt;br /&gt;
31/32   1F/20   End of storage (last byte used by Basic)&lt;br /&gt;
33/34   21/22   Top of Stack. ((Stack grows down)&lt;br /&gt;
35/36   23/24   Top of free STRING space. By subtracting the&lt;br /&gt;
                contents of 33/34 you get free string space&lt;br /&gt;
37/38   25/26   Pointer to STRING in string space&lt;br /&gt;
39/40   27/28   Top of RAM available to Basic&lt;br /&gt;
41/42   29/2A   Line number used in &amp;#039;CONT&amp;#039; command&lt;br /&gt;
43/44   2B/2C   Temp G.P. line number store&lt;br /&gt;
45/46   2D/2E   Pointer to statement to be executed&lt;br /&gt;
47/48   2F/30   Direct mode command text pointer&lt;br /&gt;
49/50   31/32   Current DATA statement line number&lt;br /&gt;
51/52   33/34   Address of next item in current data sta&amp;#039;nt&lt;br /&gt;
53/54   35/36   Address of keyboard input buffer&lt;br /&gt;
55/56   37/38   Pointer to VARIABLE last in use&lt;br /&gt;
57/58   39/3A   VARPTR address of variable last in use&lt;br /&gt;
59/78   3B/4E   Evaluation variables&lt;br /&gt;
65/66   41/42   High end destination address for block move&lt;br /&gt;
67/68   43/44   High end origin address&lt;br /&gt;
69/70   45/46   Low end destination address&lt;br /&gt;
71/72   47/48   Low end origin address&lt;br /&gt;
79/84   4F/54   Floating Point Accumulator: No 1&lt;br /&gt;
79      4F      Exponent )&lt;br /&gt;
80/83   50/53   Mantissa ) Details of FPA&lt;br /&gt;
84      54      Sign     )&lt;br /&gt;
85      55      Temporary sign of FAC&lt;br /&gt;
86      56      String variable length&lt;br /&gt;
92/97   5C/61   Floating Pt Acc No 2: details as before&lt;br /&gt;
98      62      Sign comparison&lt;br /&gt;
99      63      Extended precision byte-Coco&lt;br /&gt;
104/105 68/69   Current line number (65535 in direct mode)&lt;br /&gt;
106     6A      VDU Comma field width (default 16)&lt;br /&gt;
107     6B      VDU Last Comma field (screen width - above)&lt;br /&gt;
108     6C      VDU Current column number (0 - 31)&lt;br /&gt;
109     6D      VDU Line width. No of characters per line&lt;br /&gt;
110     6E      Cassette I/O flag. Set FF on input incurring&lt;br /&gt;
111     6F      DEVN: re text output: 0=VDU 255=tape 254=prt&lt;br /&gt;
112     70      Cassette EOF flag: EOF reached if non zero&lt;br /&gt;
113     71      Restart flag. If&amp;lt;&amp;gt;$55 - cold start on reset&lt;br /&gt;
114/115 72/73   Restart vector. If flag=$55 &amp;amp; vector points&lt;br /&gt;
                points to a NOP then warm start else&lt;br /&gt;
                a cold start.&lt;br /&gt;
116/117 74/75   Physical end of RAM&lt;br /&gt;
120     78      Cassette status:0=closed 1=input 2=output&lt;br /&gt;
121     79      I/O buffer size&lt;br /&gt;
122/3   7A/B    Header buffer address:where f&amp;#039;name block is&lt;br /&gt;
124     7C      Cassette block type:&lt;br /&gt;
                0=f&amp;#039;name block 1=data block 255=EOF marker b&lt;br /&gt;
125     7D      BLKLEN:Cass Block length:Bytes to read/write&lt;br /&gt;
126/7   7E/F    Cassette I/O buffer address&lt;br /&gt;
128     80      Used internally to calculate the checksum&lt;br /&gt;
129     81      I/O error code 1=CRC 2=attempt load into RAM&lt;br /&gt;
130/2   82/4    Temp store used by COS&lt;br /&gt;
133     85      Last sine value&lt;br /&gt;
134     86      Data for Lo-res SET/RESET routine&lt;br /&gt;
135     87      ASCII code of last key pressed&lt;br /&gt;
136/7   88/89   Current VDU cursor address (ie screen pos)&lt;br /&gt;
138/9   8A/B    G.P. (16 bit) scratch pad&lt;br /&gt;
140     8C      Sound pitch value (frequency)&lt;br /&gt;
141/2   8D/E    GP Countdown facility (?duration of sound)&lt;br /&gt;
143     8F      Cursor Flash Counter&lt;br /&gt;
144/5   90/1    Cassette leader byte count (number of &amp;amp;H55s)&lt;br /&gt;
146     92      Min Cycle width of 1200HZ - Init=12&lt;br /&gt;
147     93      Min Pulse width of 1200HZ - Init=0A&lt;br /&gt;
148     94      Max pulse width of 1200HZ - Init=12&lt;br /&gt;
149/50  95/6    Dragon - Motor on delay&lt;br /&gt;
                Coco - Serial printer Baud rate constant&lt;br /&gt;
                HEX    Msb  Lsb (decimal) Baud&lt;br /&gt;
                       149  150&lt;br /&gt;
                02EB     2  235             75&lt;br /&gt;
                01CA     1  202            120&lt;br /&gt;
                0173     1  115            150&lt;br /&gt;
                00BE     0  180            300&lt;br /&gt;
                0057     0   87            600 (default)&lt;br /&gt;
                0028     0   41           1200&lt;br /&gt;
                0012     0   18           2400&lt;br /&gt;
                0006     0    6           4800&lt;br /&gt;
                0001     0    1           9600&lt;br /&gt;
151/2   97/8    Keyboard Scan Delay constant: Init=&amp;amp;H045E&lt;br /&gt;
153     99      Printer Comma Field Width: Default 16&lt;br /&gt;
154     9A      Printer Last Comma Field&lt;br /&gt;
155     9B      Printer Line Width: Set this to width 80?&lt;br /&gt;
156     9C      Printer Head Column:same as POS(-2) in basic&lt;br /&gt;
157/8   9D/E    Exec Entry address&lt;br /&gt;
159/170 9F/AA   Self modifying routine which reads next char&lt;br /&gt;
166/7   A6/7    Address of current sig byte - next char pntr&lt;br /&gt;
171/4   AB/E    Used by RND command&lt;br /&gt;
175     AF      TRON/TROFF flag: Non zero - trace on&lt;br /&gt;
176/7   B0/1    Address os start of USR address table&lt;br /&gt;
178     B2      Current foreground colour&lt;br /&gt;
179     B3      Current Background colour&lt;br /&gt;
180     B4      Temp colour in use&lt;br /&gt;
181     B5      Byte value for current colour: ie bits set&lt;br /&gt;
182     B6      Graphics PMODE number in use.&lt;br /&gt;
183/4   B7/8    Address of LAST byte of current graphics&lt;br /&gt;
185     B9      Number of bytes per line in current PMODE&lt;br /&gt;
186/7   BA/B    Address of FIRST byte: current graphics disp&lt;br /&gt;
188     BC      Start of graphics pages (MSB) defaults to 06&lt;br /&gt;
                Changed to 0C by Dragondos&lt;br /&gt;
189/90  BD/E    Current X Cursor position (not available&lt;br /&gt;
191/2   BF/C0   Current Y Cursor position (n.a.)&lt;br /&gt;
193     C1      Colour Set currently in use&lt;br /&gt;
194     C2      Plot/Unplot flag:0=Reset, Non-zero=Set&lt;br /&gt;
195/96  C3/4    Current Horizontal Pixel number&lt;br /&gt;
197/8   C5/6    Current Vertical Pixel number&lt;br /&gt;
199/200 C7/C8   Current X cursor co-ordinate&lt;br /&gt;
201/2   C9/CA   Current Y cursor co-ordinate&lt;br /&gt;
203/4   CB/CC   Circle command X co-ordinate&lt;br /&gt;
205/6   CD/CE   Circle command Y co-ordinate&lt;br /&gt;
207/8   CF/D0   RENUMber increment value&lt;br /&gt;
209/10  D1/2    RENUMber Start line (original number)&lt;br /&gt;
211/2   D3/4    CLOADM: 2&amp;#039;s complement load offset value&lt;br /&gt;
213/4   D5/6    RENUMber New Start line (new number)&lt;br /&gt;
215     D7      Editor line length - not user available&lt;br /&gt;
216/221 D8/DD   Graphics use&lt;br /&gt;
222     DE      Current octave in use (0 - 4)&lt;br /&gt;
223/4   DF/E0   Volume data for volume setting in PLAY&lt;br /&gt;
225     E1      Current note length in PLAY&lt;br /&gt;
226     E2      Current TEMPO for PLAY command&lt;br /&gt;
227/8   E3/4    Music duration count&lt;br /&gt;
229     E5      Music dotted note flag&lt;br /&gt;
230     E6      Coco - Baud rate constant&lt;br /&gt;
231     E7      Coco - Input timeout constant&lt;br /&gt;
232     E8      Current ANGLE used in DRAW routine&lt;br /&gt;
233     E9      Current SCALE used in DRAW routine&lt;br /&gt;
234     EA      Disk operation code-what operation specified&lt;br /&gt;
235     EB      Disk Drive number(1 - 4) Coco(1 - 3)&lt;br /&gt;
236     EC      Disk read/write TRACK number&lt;br /&gt;
237     ED      Disk read/write SECTOR number&lt;br /&gt;
238/9   EE/F    Disk read/write Sector Buffer address&lt;br /&gt;
240     F0      Disk Error Status byte (Convt to DDOS code)&lt;br /&gt;
241     F1      Disk File Control Block number (1 - 10)&lt;br /&gt;
242     F2      Number of bytes in Disk buffer area&lt;br /&gt;
243     F3      No of bytes to transfer to/from buffer&lt;br /&gt;
244     F4      Number of SIDES/TRACKS for current drive&lt;br /&gt;
                00=1 side 40 tracks     01=2 sides 40 tracks&lt;br /&gt;
                FF=1 side 80 tracks     FE=2 sides 80 tracks&lt;br /&gt;
                The FORMAT of a disk is taken from the last&lt;br /&gt;
                few bytes of Sector 1 of Track 20 in Drogon&lt;br /&gt;
                DOS, on first access of disk after switch on&lt;br /&gt;
                or RESET.&lt;br /&gt;
245     F5      File Read/write flag&lt;br /&gt;
                0=read, 1=write &amp;amp; FF=verify&lt;br /&gt;
246     F6      Disk I/O in progress flag&lt;br /&gt;
256/8   100/2   SWI3 JUMP VECTOR - called from &amp;amp;HFFF2&lt;br /&gt;
                Execution of a SWI3 instruction of &amp;amp;H113F&lt;br /&gt;
                will stack Registers and jump here&lt;br /&gt;
259/61  103/5   SWI2 JUMP VECTOR - called from &amp;amp;HFFF4&lt;br /&gt;
                Execution of a SWI2 instruction of &amp;amp;H103F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
262/4   106/8   SWI1 JUMP  VECTOR - called from &amp;amp;HFFFA -&amp;amp;H3F&lt;br /&gt;
                will stack registers and jump here&lt;br /&gt;
265/7   109/B   NMI JUMP VECTOR -non-maskable interrupt&lt;br /&gt;
                called from &amp;amp;HFFFC, set to &amp;amp;H7ED7AE JUMPD7AE&lt;br /&gt;
                by initialisation of disk operating system&lt;br /&gt;
                in the Coco. Okay for Dragon?&lt;br /&gt;
268/70  10C/E   IRQ JUMP SECTOR - Interrupt request called&lt;br /&gt;
                from &amp;amp;HFFF8. Set to &amp;amp;H7EA9B3 to initialise&lt;br /&gt;
                Basic, Set to &amp;amp;H7E894C for initialisation of&lt;br /&gt;
                extended Basic or set to &amp;amp;H7ED7BC for the&lt;br /&gt;
                initialisation of DOS in the Coco.&lt;br /&gt;
271/3   10F/111 FIRQ JUMP VECTOR - Fast interrupt request&lt;br /&gt;
                called from &amp;amp;HFFF6, set to &amp;amp;H7EA0F6 by the&lt;br /&gt;
                initialisation of Basic and causes a jump to&lt;br /&gt;
                the Cartridge Port in the Coco.&lt;br /&gt;
274/6   112/4   In Coco this is EXEC of USR basic function&lt;br /&gt;
274/5   112/3   Timer - current value of system timer&lt;br /&gt;
                In both Dragon and Coco (double function)&lt;br /&gt;
277/81  115/9   Random number seeds used in RND function&lt;br /&gt;
282/7   11A/F   Unused in Dragon&lt;br /&gt;
282     11A     Coco - Caps lock 1=lock 0=unlock (lower case&lt;br /&gt;
283/4   11B/C   Coco - keyboard delay constant&lt;br /&gt;
285/7   11D/F   Coco - Vector to 45509 (JUMP $8489)&lt;br /&gt;
288     120     Number of Basic commands (reserved words)&lt;br /&gt;
289/90  121/2   Address of list of Basic commands&lt;br /&gt;
291/2   123/4   Address of Command Despatch Table&lt;br /&gt;
293     125     Number of Basic functions&lt;br /&gt;
294/5   126/7   Address of list of Basic functions&lt;br /&gt;
296/7   128/9   Address of Function Despatch Table&lt;br /&gt;
298/307 12A/133 As for 288 to 297, but in Dragon refers to&lt;br /&gt;
                Disk commands and functions, but in the Coco&lt;br /&gt;
                to Extended Basic commands and functions.&lt;br /&gt;
308/317 134/13D These addresses as above re COCO disks.&lt;br /&gt;
308/327 134/147 DRAGON - USR Table (20 bytes 2 each USR)&lt;br /&gt;
                This USR table is switched to 1667 to 1686,&lt;br /&gt;
                or Hex 683 to 696 when DOS is connected and&lt;br /&gt;
                is replaced with Disk Stub3 which acts as a&lt;br /&gt;
                terminator.&lt;br /&gt;
328     148     PRINTER AUTO LF/CR Flag&lt;br /&gt;
329     149     Dragon - Caps Lock flag:non zero=upper case&lt;br /&gt;
330     14A     Number of chars in end of line sequence(1-4)&lt;br /&gt;
331/4   14B/E   End of Line Characters: Set to CR/LF/NUL/NUL&lt;br /&gt;
                This sequence is sent to printer when a&lt;br /&gt;
                carriage return is output.&lt;br /&gt;
336/45  150/9   Dragon Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
338/45  152/9   Coco Keyboard &amp;#039;Roll-over&amp;#039; table&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DRAGON/COCO KEYBOARD ROLLOVER TABLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        Response:&lt;br /&gt;
 Address    191    223   239   247   251   253   254&lt;br /&gt;
Dec  Hex   D   C   D  C  D  C  D  C  D  C  D  C  D  C&lt;br /&gt;
338  152  ENT ENT  X  8  P  0  H  X  @  P  8  H  0  @&lt;br /&gt;
339  153  CLR CLR  Y  9  Q  1  I  Y  A  Q  8  I  1  A&lt;br /&gt;
340  154  BRK BRK  Z  :  R  2  J  Z  B  R  :  J  2  B&lt;br /&gt;
341  155              ;  S  3  K     C  S  ;  K  3  C&lt;br /&gt;
342  156              ,  T  4  L     D  T  ,  L  4  D&lt;br /&gt;
343  157              -  U  5  M     E  U  -  M  5  E&lt;br /&gt;
344  158              .  V  6  N     F  V  .  N  6  F&lt;br /&gt;
345  159          SPC /  W  7  O SPC G  W  /  O  7  G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
RESPONSE IS 255 OR &amp;amp;HFF IF NO KEY IS PRESSED&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
346     15A     Right Joystick(0) - X value&lt;br /&gt;
347     15B     Right Joystick(1) - Y value&lt;br /&gt;
348     15C     Left Joystick (2) - X value&lt;br /&gt;
349     15D     Left Joystick (3) - Y value&lt;br /&gt;
&lt;br /&gt;
350 to 424 15E to 1A8   RAM HOOKS (each 3 bytes)&lt;br /&gt;
350/2   15E/160 Device Open- called just before OPEN command&lt;br /&gt;
353/5   161/3   Device Number-called when a DEVN is verified&lt;br /&gt;
356/8   164/6   Device Initialisation- called before setting&lt;br /&gt;
                up the Device parameters in Loctn 106 to 109&lt;br /&gt;
359/61  167/9   OUTPUT CHAR TO DEVN:called just before out-&lt;br /&gt;
                putting char in A Reg to DEVN&lt;br /&gt;
362/4   16A/C   INPUT CHAR FROM DEVN: called just before&lt;br /&gt;
                inputting a char from DEVN into A Register&lt;br /&gt;
365/7   16D/F   INPUT FILE: called just before inputting a&lt;br /&gt;
                file using INPUT&lt;br /&gt;
368/70  170/2   OUTPUT FILE: called just before outputting&lt;br /&gt;
                to a file using PRINT&lt;br /&gt;
371/3   173/5   CLOSE ALL FILES: called before all files are&lt;br /&gt;
                closed, action only taken if Cassette open&lt;br /&gt;
374/6   176/8   CLOSE FILE: called before device is CLOSED&lt;br /&gt;
                action only taken if DEVN is -1 (tape)&lt;br /&gt;
377/9   179/B   COMMAND INTERPRETER: called before interpret&lt;br /&gt;
                of token in A Reg as command, used by Delta&lt;br /&gt;
380/2   17C/E   RE-REQUEST INPUT. Called before requesting&lt;br /&gt;
                more data from keyboard- ie before ?? prompt&lt;br /&gt;
383/5   17F/181 CHECK KEYS. Called before keyboard scanned&lt;br /&gt;
                for BREAK and SHIFT/@. Keyboard not scanned&lt;br /&gt;
                if DEVN is -1.&lt;br /&gt;
386/8   182/4   LINE INPUT FILE. Called before Line Input is&lt;br /&gt;
                executed on current DEVN&lt;br /&gt;
389/91  185/7   CLOSE FILE &amp;amp; COMMAND. Called before closing&lt;br /&gt;
                an ASCII file just read in as a Basic prog&amp;#039;m&lt;br /&gt;
                by CLOAD &amp;amp; returning to COMMAND mode.&lt;br /&gt;
392/4   188/A   CHECK EOF. Called before checking for EOF&lt;br /&gt;
                for current DEVN&lt;br /&gt;
395/7   18B/D   EVALUATE EXPRESSION. (obvious)&lt;br /&gt;
398/400 18E/190 USER ERROR TRAP. Can be patched by the user,&lt;br /&gt;
                that is in Basic, to trap error messages.&lt;br /&gt;
401/3   191/3   SYSTEM ERROR TRAP. Can be patched by the&lt;br /&gt;
                &amp;#039;system&amp;#039;, ie Basic extension ROMs to trap&lt;br /&gt;
                errors (used by Dragondos)&lt;br /&gt;
404/6   194/6   RUN LINK. Called when RUN command is about&lt;br /&gt;
                to be executed. Patched by DDOS to allow a&lt;br /&gt;
                disk filename to be specified.&lt;br /&gt;
407/9   197/9   RESET BASIC MEMORY. Called from two routines&lt;br /&gt;
                in ROM before Basic Memory vectors are&lt;br /&gt;
                changed, ie by entering or editing lines,&lt;br /&gt;
                running programs etc.&lt;br /&gt;
410/2   19A/C   GET NEXT COMMAND. Called before reading in&lt;br /&gt;
                the next Basic command to be executed while&lt;br /&gt;
                program is running.&lt;br /&gt;
413/5   19D/F   ASSIGN STRING VARIABLE. (obvious)&lt;br /&gt;
416/8   1A0/2   SCREEN ACCESS. Called before the CLS,GET and&lt;br /&gt;
                PUT commands are executed.&lt;br /&gt;
419/21  1A3/5   TOKENISE LINE. Called before an ASCII line&lt;br /&gt;
                is tokenised in internal Basic format&lt;br /&gt;
422/4   1A6/8   DETOKENISE LINE. Called before a Tokenised&lt;br /&gt;
                line is converted to ASCII characters&lt;br /&gt;
425/464 or 1A9/1D0  STRING BUFFER AREA&lt;br /&gt;
465     1D1     Cassette filename length&lt;br /&gt;
466/73  1D2/9   Cassette filename to search for/or write out&lt;br /&gt;
474/728 or 1DA/2D8  CASSETTE FILE DATA BUFFER&lt;br /&gt;
                Area of memory used to load filename block &amp;amp;&lt;br /&gt;
                ASCII data blocks - if this contains a file-&lt;br /&gt;
                name block then this can be peeked (474-488)&lt;br /&gt;
474/81  1DA/1E1 Cassette filename (in buffer)&lt;br /&gt;
482     1E2     File type: 0=token basic 1=ASCII 2=binary&lt;br /&gt;
483     1E3     ASCII flag: 0=binary, non-zero=ASCII files.&lt;br /&gt;
484     1E4     Gap flag: 1=continuous, 255(FF)=gapped files&lt;br /&gt;
485/6   1E5/6   Execution address of machine code file&lt;br /&gt;
487/8   1E7/8   Load address of ungapped machine code file&lt;br /&gt;
729/33  2D9/C   Basic line input buffer preamble&lt;br /&gt;
734/984 2DD/3D8 Basic line input buffer&lt;br /&gt;
985/1002 3D9/EA BUFFER space&lt;br /&gt;
1003/20 3EB/3FC Unused&lt;br /&gt;
1021/2  3FD/E   End of line delay - RS 232 port on D64&lt;br /&gt;
1023    3FF     D64 RS 232 port Baud rate controller port&lt;br /&gt;
1024)   400)    TEXT SCREEN&lt;br /&gt;
1535)   5FF)         Default area.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Coco Buffer areas are slightly different:&lt;br /&gt;
733/988 2DD/3DC 255 byte Keyboard buffer&lt;br /&gt;
737/827 2E1/33B 90 byte Screen buffer&lt;br /&gt;
&lt;br /&gt;
The Disk Work area is from 1536 to 3071, or &amp;amp;H0600 to &amp;amp;H0BFF&lt;br /&gt;
Otherwise if disks are not installed these addresses are in&lt;br /&gt;
respect of the first of the Graphic pages, but with the DOS&lt;br /&gt;
installed the Graphics page 1 starts at 3072 (&amp;amp;H0C00).&lt;br /&gt;
&lt;br /&gt;
== DRAGONDOS WORK SPACE ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1536    0600    Start of Disk work space or Graphics Page 1&lt;br /&gt;
                when Disk cartridge not installed&lt;br /&gt;
1541    0605    Countdown to Disk motor off: Off when zero&lt;br /&gt;
1544    0608    Auto Verify ON/OFF: 0=off else checks sector&lt;br /&gt;
1546    060A    Current Default drive No. Used when no Drive&lt;br /&gt;
                number is specified in the command&lt;br /&gt;
1549/50 060D/E  Auto command line number in use&lt;br /&gt;
1551/2  060F/10 Auto command increment value&lt;br /&gt;
1553    0611    Program LOAD/RUN flag: 0=Load else Load/RUN&lt;br /&gt;
1555    0613    Auto command ON/OFF flag: 0=off else Auto on&lt;br /&gt;
1556    0614    Error command ON/OFF flag: 0=off else ERR on&lt;br /&gt;
1557/8  0615/6  ERROR trap line number: Basic line error rtn&lt;br /&gt;
1559/60 0617/8  ERL: line number of last error&lt;br /&gt;
1561    0619    ERR: Error code of last basic error&lt;br /&gt;
1562/3  061A/B  Address of start of statement in error&lt;br /&gt;
1564/9  061C/21 Drive 1 details&lt;br /&gt;
1570/5  0622/7  Drive 2 details&lt;br /&gt;
1576/81 0628/D  Drive 3 details&lt;br /&gt;
1582/7  062E/33 Drive 4 details&lt;br /&gt;
1588)   0634)   Disk Buffers 1 to 4 details, 7 bytes each&lt;br /&gt;
1615)   064F)&lt;br /&gt;
1616/66 0650/82 Current Drive information&lt;br /&gt;
1618/9  0652/3  Start address of program loaded&lt;br /&gt;
1620/1  1654/5  Length of program loaded&lt;br /&gt;
1622/3  1656/7  Entry (EXEC) address of M/code program&lt;br /&gt;
1667/86 1683/96 USR Vector table: relocated from 308-327(dec&lt;br /&gt;
1687 to 1706)   Disk Drive Parameter table&lt;br /&gt;
0697 to 06AA)   4 bytes per parameter - 1 for each drive&lt;br /&gt;
1687/90 0697/A  On Line Flag: Non zero means dive on line&lt;br /&gt;
1691/4  069B/E  Current Track, if Drive on line&lt;br /&gt;
1695/8  069F/A2 Head Stepping rate: This should only be&lt;br /&gt;
                changed if slower drives are used.&lt;br /&gt;
1699/702&lt;br /&gt;
        06A3/6  Disk Tracks on each drive&lt;br /&gt;
1703/6  06A7/A  Disk Sectors per track on each drive&lt;br /&gt;
1707/24 06AB/BC Directory Sector status&lt;br /&gt;
1725/2034       File Control Blocks: 10 in all: One for each&lt;br /&gt;
        6BD/7F2 open file: Each FCB 32 bytes long&lt;br /&gt;
2035/47 7F3/F   Temporary variables&lt;br /&gt;
2048/3071      )Disk Buffers: 4 in all, each 256 bytes long&lt;br /&gt;
        800/BFF)&lt;br /&gt;
&lt;br /&gt;
3072    0C00    Start of Graphic Page 1 when disks in place&lt;br /&gt;
                otherwise start of Graphic Page 2 for tapes.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BASIC INTERPRETER CODES ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
32768   8000    Hardware initialisation&lt;br /&gt;
32771   8003    Software initialisation&lt;br /&gt;
32774   8006    POLCAT:Keyboard input:put into Register A&lt;br /&gt;
32777   8009    Cursor Blink&lt;br /&gt;
32780   800C    CHROUT:Write character in Reg A to screen&lt;br /&gt;
32783   800F    Writes out character in Reg A to printer&lt;br /&gt;
32786   8012    Joystick input:stored in addresses 346/9 dec&lt;br /&gt;
32789   8015    Cassette on&lt;br /&gt;
32792   8018    Cassette off&lt;br /&gt;
32795   801B    Write leader to cassette (or A00C)&lt;br /&gt;
32798   801E    Output byte from Reg A to cassette&lt;br /&gt;
32801   8021    CSRDON:Cassette on, prepare for reading&lt;br /&gt;
32804   8024    Input one byte from cassette to Register A&lt;br /&gt;
32807   8027    Gets one bit in from cassette into carry&lt;br /&gt;
32810   802A    Reads in a byte from another computer&lt;br /&gt;
32813   802D    Sends a byte to another computer&lt;br /&gt;
32816   8030    Select Baud rate of communications line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
From here on the Coco equivalents are given in brackets and&lt;br /&gt;
only a few Hex addresses will be given&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
33604  (44102)  SYSERR: Generates appropriate action for&lt;br /&gt;
                Error code in B Reg&lt;br /&gt;
33649  (44147)  CMDMODE: prints OK prompt &amp;amp; returns to the&lt;br /&gt;
                command mode&lt;br /&gt;
33773  (44271)  BASVECT2: complete initialisation process&lt;br /&gt;
                after Basic program loaded&lt;br /&gt;
33815  (44313)  NEW Basic:removes current Basic program from&lt;br /&gt;
                memory, resets stack &amp;amp; clears variables&lt;br /&gt;
33823  (44321)  BASVECT1: Sets up various necessary vectors,&lt;br /&gt;
                once a Basic program has been loaded&lt;br /&gt;
33844  (44339)  RESETS STACK: Resets stack to initial position&lt;br /&gt;
                all entries are lost&lt;br /&gt;
33951  (44446)  RUN BASIC: runs a basic program in memory,&lt;br /&gt;
                used to AUTORUN programs&lt;br /&gt;
34091   851B    (44539) WAIT KEY: waits for a key press, and&lt;br /&gt;
                when key pressed puts it in A Register&lt;br /&gt;
34935  (45382)  GET EXPR: routine will evaluate &amp;amp; put VARPTR&lt;br /&gt;
                address of following expression into 82/83&lt;br /&gt;
34951  (45398)  GET STRG: compiles a string and puts it into&lt;br /&gt;
                free string space&lt;br /&gt;
35236  (45671)  CKCLBRAK: as for CKCOMA, but checks for a&lt;br /&gt;
                closed bracket&lt;br /&gt;
35239  (45674)  CKOPBRAK: as for above, but checks for an&lt;br /&gt;
                open bracket&lt;br /&gt;
35242  (45677)  CKCOMA: Checks to see next significant char&lt;br /&gt;
                in command line is a comma, and if not it&lt;br /&gt;
                produces a SYNTAX error&lt;br /&gt;
35244  (45679)  CKCHAR: as for CKCOMA, but checks for char&lt;br /&gt;
                in B Register&lt;br /&gt;
35476  (45911)  GETVAR: Get VARPTR address of the follwing&lt;br /&gt;
                variable&amp;#039;s name&lt;br /&gt;
35625  (46057)  GETUSR: Returns value of the argument in the&lt;br /&gt;
                USR function as 16 bit number in D register&lt;br /&gt;
35632           INTCNV: pass parameters to M/code routine&lt;br /&gt;
35641           GIVABF:used to pass values from M/C to Basic&lt;br /&gt;
35893  (46322)  ASSIGN-16-BIT:assigns value in D Register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
35894  (46323)  ASSIGN-8-BIT:assigns value in B register to&lt;br /&gt;
                a numeric variable&lt;br /&gt;
36055  (46481)  GARBAGE COLLECT: forces a controlled garbage&lt;br /&gt;
                collection of string space&lt;br /&gt;
36255  (46681)  DELVAR: frees space taken by a variable&lt;br /&gt;
36433  (46859)  GET-8-BIT: returns value of the following&lt;br /&gt;
                number in B Register&lt;br /&gt;
36483  (46909)  GET-16-BIT: returns value of the following&lt;br /&gt;
                number in X register&lt;br /&gt;
36522  (46948)  LIST BASIC: lists basic program in memory to&lt;br /&gt;
                to DEVN (device specified)&lt;br /&gt;
37025   90A1    (47448) PRINT CR/LE: moves cursor position&lt;br /&gt;
                to start of a new line&lt;br /&gt;
37093   90E5    (47516) OUT STRING:Outputs a text string to&lt;br /&gt;
                device number in DEVN&lt;br /&gt;
38266   957A    (48588) PRINT NUMBER:outputs 16 bit number&lt;br /&gt;
                in D Reg to DEVN&lt;br /&gt;
38798   978E    RANDOM NUMBER: Generates an 8 bit random&lt;br /&gt;
                number and puts it in location 278&lt;br /&gt;
39998  (34830)  ASSIGN-16-BITB:alternative to 35893, assigns&lt;br /&gt;
                value in Locs 82/83 to a variable&lt;br /&gt;
41194   A0EA    (36038) WAIT WITH CURSOR:scans keyboard for&lt;br /&gt;
                a keypress, flashing cursor at print pos.&lt;br /&gt;
43207  (38201)  CLEAR GRAPHICS:clears current graphics&lt;br /&gt;
                screen to data in B Register on entry&lt;br /&gt;
43304  (38298)  SET COLOURS: sets up locations 180 &amp;amp; 181&lt;br /&gt;
43320  (38314)  SELECT DISPLAY: Selects text or graphics&lt;br /&gt;
                depending on Z condition code, if Z=1 text&lt;br /&gt;
43322   95AC    (38316) RESET VDU: resets default VDU mode&lt;br /&gt;
43401  (38395)  SET VDG MODE:sets VDG in mode given in A Reg&lt;br /&gt;
43421  (38415)  SET VDG OFFSET: sets display offset for the&lt;br /&gt;
                graphics mode&lt;br /&gt;
43428  (38422)  SELECT VDG COL: selects required VDG colour&lt;br /&gt;
                set from the data in location 193&lt;br /&gt;
43489  (38483)  SELECT PAGE: on entry B reg contains page no&lt;br /&gt;
43536  (38530)  SELECT COL SET: selects colour set 0 or 1,&lt;br /&gt;
                according to data in B reg&lt;br /&gt;
43555  (38549)  RESERVE HRG RAM: reserves RAM for graphics&lt;br /&gt;
                and moves basic if necessary&lt;br /&gt;
44698  (39639)  PLAY NOTE: A Reg contains ASC code of note,&lt;br /&gt;
                other parameters should be set up&lt;br /&gt;
45137  (40118)  DRAW:allows access to all facilities of DRAW&lt;br /&gt;
46004  (40999)  RESET:resets whole works, as if reset button&lt;br /&gt;
                has been pressed&lt;br /&gt;
46080  (41142)  BOOT BASIC: restarts the Basic interpreter&lt;br /&gt;
                as if on power up or reset&lt;br /&gt;
46410   B54A    (41602) OUTCHAR:outputs character in A Reg&lt;br /&gt;
                to device number in DEVN (location 111)&lt;br /&gt;
46687  (42029)  CLOSE FILES: closes any open tape stream and&lt;br /&gt;
                flushes buffer&lt;br /&gt;
46757  (42089)  WRITE BASIC: writes current basic program to&lt;br /&gt;
                cassette&lt;br /&gt;
46920  (42257)  READ BINARY: reads in BIN file from tape&lt;br /&gt;
47283  (42625)  FIND FILE: searches tape for matching filename&lt;br /&gt;
47411  (42753)  READ 1ST BLOCK:gets filename block into tape&lt;br /&gt;
                buffer&lt;br /&gt;
47422   B93E    (42763) BLKIN: reads a block of data into&lt;br /&gt;
                cassette buffer&lt;br /&gt;
47505  (42981)  WRITE 1ST BLOCK: (obvious)&lt;br /&gt;
47513   B999    (42996) BLKOUT: write block of data to tape&lt;br /&gt;
47583  (43149)  SET LRG LEVEL:on entry the X Reg contains&lt;br /&gt;
                Lo-res screen address, B Reg colour &amp;amp; loc184&lt;br /&gt;
                the OR data&lt;br /&gt;
47623  (43189)  RESET LRG PIXEL:as above but B Reg ignored,&lt;br /&gt;
                Pixel reset to Black&lt;br /&gt;
47656  (43225)  CALC PIXEL POS:on entry the top of stack&lt;br /&gt;
                must contain Lo-res vertical co-ordinate,&lt;br /&gt;
                preceded by horizontal co-ordinate&lt;br /&gt;
47735   BA77    (43304) CLEAR SCREEN: clears screen to space&lt;br /&gt;
                and &amp;#039;homes&amp;#039; cursor&lt;br /&gt;
47737   BA79    (43306) CLEAR SCREEN to CHR: clears screen&lt;br /&gt;
                to character in B Reg&lt;br /&gt;
47776  (43345)  BEEP:sound Beep for length held in B Reg and&lt;br /&gt;
                pitch set by location 140&lt;br /&gt;
47811  (43380)  AUDIO OFF: disables sound:clears bit 3 65315&lt;br /&gt;
47813  (43382)  ENABLE SOUND: enables 6 bit sound by setting&lt;br /&gt;
                Bit 3 of 65315&lt;br /&gt;
47828  (43397)  RESET D/A: Puts value $7E into D/A converter&lt;br /&gt;
                address&lt;br /&gt;
47830  (43399)  WRITE D/A: puts contents of A Reg into D/A C&lt;br /&gt;
47852  (43421)  AUDIO ON:on entry the B Reg must be zero&lt;br /&gt;
48000   BB80    BOOT BASIC64K: Boots 64 mode&lt;br /&gt;
48053   BBB5    (41369) UPDATE CURSOR: flashes cursor&lt;br /&gt;
48101   BBE5    (41409) POLCAT: scans keyboard and puts the&lt;br /&gt;
                character in A Register&lt;br /&gt;
48288   BCA0    (41763) CLEAR VDU LINE: clears current VDU&lt;br /&gt;
                line from the cursor position&lt;br /&gt;
48299   BCAB    (41738) VDU OUT: prints char in A Reg to VDU&lt;br /&gt;
48373   BCF5    PRINTER DIR OUT: char in A Reg sent printer&lt;br /&gt;
48394   BD0A    PCRLF:moves print head to start of next line&lt;br /&gt;
48410   BD1A    (41663) PRINTER OUT:Char in Reg A to printer&lt;br /&gt;
48449  (43426)  SELECT JSK:selects joystick sources (ports -&lt;br /&gt;
                0 - 3) from A Register&lt;br /&gt;
48466   BD52    (43486) READ JSKS: Updates all joystick data&lt;br /&gt;
                locations (346/9)&lt;br /&gt;
48549   BDA5    (42837) BIT IN:reads a single bit(see below)&lt;br /&gt;
48557   BDAD    (42825) BYTE IN:reads a byte into A Reg(tape&lt;br /&gt;
48591  (42954)  MOTOR ON: tape - sets bit 3 of $FF21&lt;br /&gt;
48604  (42987)  MOTOR OFF: tape - clears bit 3 of $FF21&lt;br /&gt;
48615  (42876)  READ LEADER: motor on &amp;amp; prepares COS to read&lt;br /&gt;
48658  (43050)  BYTE OUT: writes byte in A Reg to tape&lt;br /&gt;
48746   BE6A    WRTLDR:turns cassette on and writes a leader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
THE FOLLOWING ARE DRAGONDOS ROUTINES&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
49166   C00E    LENFIL: Report file length&lt;br /&gt;
49168   C010    CLOSAL: Close all files&lt;br /&gt;
49176   C018    GETFRE: Get free space&lt;br /&gt;
49178   C01A    DELETE: Delete a file&lt;br /&gt;
49180   C01C    PROTECT/UNPROTECT a file&lt;br /&gt;
49182   C01E    RENAME a file&lt;br /&gt;
49184   C020    GETDIR: Get directory entry&lt;br /&gt;
49406   C0FC    WRITE SECTOR: Writes 256 bytes to disk&lt;br /&gt;
49412   C104    READ SECTOR: reads 256 bytes from disk&lt;br /&gt;
49509   C165    DRIVE INIT: initialises DOS hardware&lt;br /&gt;
49513   C169    HARDWARE I/O: low level command to hardware&lt;br /&gt;
50108   C3BC    FORMAT DISK: in the DEFD drive&lt;br /&gt;
53581   D14D    GET FREE SPACE: free bytes on current drive&lt;br /&gt;
54033   D311    CONVERT SECTOR:converts LSN(Logical sect no)&lt;br /&gt;
                in Y Reg to Track/Sector&lt;br /&gt;
55868   DA3C    DIR DSK: directory of disk in DEFD drive to&lt;br /&gt;
                DEVN&lt;br /&gt;
56229   DBA5    BEEP: on entry B Reg should contain number&lt;br /&gt;
                of beeps&lt;br /&gt;
56267   DBCB    WAIT TIME:on entry X Reg should contain the&lt;br /&gt;
                number of milliseconds to wait&lt;br /&gt;
56330   DC0A    BOOT DSK: boots an OS off disk in DEFD drive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== INPUT/OUTPUT ADDRESSES ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65280   FF00    Bits 0 to 6 Keyboard row input&lt;br /&gt;
                Bit 7 joystick comparator input&lt;br /&gt;
        FF01    PIA&lt;br /&gt;
65282   FF02    Bits 0 to 7 keyboard column output&lt;br /&gt;
        FF03    PIA&lt;br /&gt;
        FF04    ACIA - D64/Alpha&lt;br /&gt;
        FF05    ACIA - D64/Alpha&lt;br /&gt;
        FF06    ACIA - D64/Alpha&lt;br /&gt;
        FF07    ACIA - D64/Alpha&lt;br /&gt;
&lt;br /&gt;
65312   FF20    Bit 0 - cassette data input&lt;br /&gt;
                    1 - RS232 data output&lt;br /&gt;
                    2/7 - 6 bit D/A(.25 to 4.75 volts out)&lt;br /&gt;
65313   FF21    Bit 0 - control of CD&lt;br /&gt;
                0=FIRQ to CPU disabled, 1=enabled&lt;br /&gt;
                Bit 1 - RS 232 status input - 0=set flag falling edge CD, 1=rising edge&lt;br /&gt;
                Bit 2 - normal Data Direction Register addsd - 0=change FF20 to DDR&lt;br /&gt;
                Bit 3 - Cass Motor control, 0=off, 1=on&lt;br /&gt;
                    4 - always 1&lt;br /&gt;
                    5 - always 1&lt;br /&gt;
                    6 - not used&lt;br /&gt;
                    7 - CD interrupt flag&lt;br /&gt;
65314   FF22    Bit 0 - RS 232 data input&lt;br /&gt;
                    1 - single bit cound output&lt;br /&gt;
                    2 - RAM size input&lt;br /&gt;
                    3 - VDG Control Output CSS(color set ct)&lt;br /&gt;
                    4 - VDG Control Output GM0&amp;amp;NOT(INT)/EXT&lt;br /&gt;
                    5 - VDG Cont Output GM1&lt;br /&gt;
                    6 - VDG Cont Output GM2&lt;br /&gt;
                    7 - VDG Cont Output NOT(A)/G&lt;br /&gt;
65315   FF23    (Coco) POKE 54 to disable auto exec of cartridge&lt;br /&gt;
                POKE 55 to enable auto execute of cartridge&lt;br /&gt;
                Not certain re above for Dragon&lt;br /&gt;
                Bit 0 - control of cartridge&lt;br /&gt;
                0=FIRQ to CPU disabled, 1= enabled&lt;br /&gt;
                Bit 1 - Interrupt input&lt;br /&gt;
                0=sets flag on falling edge of cartridge&lt;br /&gt;
                1=sets flag on rising edge of cartridge&lt;br /&gt;
                Bit 2 - Normally 1, 0=changes FF22 to DDReg&lt;br /&gt;
                    3 - 6 bit sound enable&lt;br /&gt;
                    4 - always 1&lt;br /&gt;
                    5 - always 1&lt;br /&gt;
                    6 - not used&lt;br /&gt;
                    7 - Cartridge Interrupt Flag&lt;br /&gt;
65316    FF24 - Dragon Alpha PIA&lt;br /&gt;
         FF25 - Dragon Alpha PIA&lt;br /&gt;
         FF26 - Dragon Alpha PIA&lt;br /&gt;
         FF27 - Dragon Alpha PIA&lt;br /&gt;
         FF28 - Dragon Alpha 6850 Modem Port&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DISK CONTROLLERS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         FF2C - Dragon Alpha FDC&lt;br /&gt;
         FF2D - Dragon Alpha FDC&lt;br /&gt;
         FF2E - Dragon Alpha FDC&lt;br /&gt;
         FF2F - Dragon Alpha FDC&lt;br /&gt;
&lt;br /&gt;
         FF40 - Dragon FDC | CoCo FDC | CoCo SDC&lt;br /&gt;
         FF41 - Dragon FDC | CoCo FDC | CoCo SDC | Becker Port (DriveWire)&lt;br /&gt;
         FF42 - Dragon FDC | CoCo FDC | CoCo SDC | Becker Port (DriveWire)&lt;br /&gt;
         FF43 - Dragon FDC | CoCo FDC | CoCo SDC&lt;br /&gt;
         FF48 - Latch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIY PROJECTS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         FF50 - DragonMMC&lt;br /&gt;
         FF54 - DragonMMC&lt;br /&gt;
         FF56 - Dragon-MSX2+ | DragonMMC&lt;br /&gt;
         FF57 - Dragon-MSX2+&lt;br /&gt;
         FF58 - Dragon-MSX2+&lt;br /&gt;
         FF59 - Dragon-MSX2+&lt;br /&gt;
         FF5A - Dragon-MSX2+&lt;br /&gt;
         FF5B - Dragon-MSX2+&lt;br /&gt;
         FF5C - Dragon-MSX2+&lt;br /&gt;
         FF5D - Dragon-MSX2+&lt;br /&gt;
         FF5E - Dragon MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF76 - Dragon-MSX2+&lt;br /&gt;
         FF77 - Dragon-MSX2+&lt;br /&gt;
         FF78 - Dragon-MSX2+&lt;br /&gt;
         FF79 - Dragon-MSX2+&lt;br /&gt;
         FF7A - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7B - Dragon-MSX2+ | Orchestra 90&lt;br /&gt;
         FF7C - Dragon-MSX2+&lt;br /&gt;
         FF7D - Dragon-MSX2+&lt;br /&gt;
         FF7E - Dragon-MSX2+&lt;br /&gt;
&lt;br /&gt;
         FF90 - MooH&lt;br /&gt;
         FF91 - MooH&lt;br /&gt;
         FFA0 - MooH&lt;br /&gt;
         FFA1 - MooH&lt;br /&gt;
         FFA2 - MooH&lt;br /&gt;
         FFA3 - MooH&lt;br /&gt;
         FFA4 - MooH&lt;br /&gt;
         FFA5 - MooH&lt;br /&gt;
         FFA6 - MooH&lt;br /&gt;
         FFA7 - MooH&lt;br /&gt;
         FFA8 - MooH&lt;br /&gt;
         FFA9 - MooH&lt;br /&gt;
         FFAA - MooH&lt;br /&gt;
         FFAB - MooH&lt;br /&gt;
         FFAC - MooH&lt;br /&gt;
         FFAD - MooH&lt;br /&gt;
         FFAE - MooH&lt;br /&gt;
         FFAF - MooH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
65471    FFBF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SAM CONTROL BITS ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65472/7 FFC0/5  VDG Control Registers for 6883 SAM&lt;br /&gt;
                Contains 3 pairs of addresses (V0-V2), and&lt;br /&gt;
                poking any value to EVEN addresses sets Bit&lt;br /&gt;
                Off(0) in VDG circuitry. Poking value to ODD&lt;br /&gt;
                addresses set Bit ON(1) in 6847 VDG circuit&lt;br /&gt;
65472/3 FFC0/1  Control of Bit 0 (V0)&lt;br /&gt;
65474/5 FFC2/3                 1 (V1)&lt;br /&gt;
65476/7 FFC4/5                 2 (V2)&lt;br /&gt;
65478/91        Page Select Register contains 7 pairs of&lt;br /&gt;
        FFC6/D3 (F0-F6) control Display Start address (Bin)&lt;br /&gt;
                Address os upper left most display element=&lt;br /&gt;
                0000+1/2*OFFSET. Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0) in Page select.&lt;br /&gt;
                Poking any value to ODD addresses sets Bit&lt;br /&gt;
                ON(1) in Page Select Circuitry.&lt;br /&gt;
                Also BASEPAGE is set by converting binary&lt;br /&gt;
                value of F  (Bits F0 to F6) to decimal and&lt;br /&gt;
                multiplying this decimal number by 512.&lt;br /&gt;
65478/9 FFC6/7  Control of Bit 0 (F0)&lt;br /&gt;
65480/1 FFC8/9                 1 (F1)&lt;br /&gt;
65482/3 FFCA/B                 2 (F2)&lt;br /&gt;
65484/5 FFCC/D                 3 (F3)&lt;br /&gt;
65486/7 FFCE/F                 4 (F4)&lt;br /&gt;
65488/9 FFD0/1                 5 (F5)&lt;br /&gt;
65490/1 FFD2/3                 6 (F6)&lt;br /&gt;
&lt;br /&gt;
65492/3 FFD4/5  Page #1 P1 control of Bit 7: (F7) 0=Normal&lt;br /&gt;
65494/7 FFD6/9  Clock Speed (R0-R1) Poking any value to even&lt;br /&gt;
                addresses sets Bit OFF (0). Poking any value&lt;br /&gt;
                to ODD addresses sets bit ON (1).&lt;br /&gt;
65494/5 FFD6/7  Control of Bit R0&lt;br /&gt;
65496/7 FFD8/9  Control of Bit R1&lt;br /&gt;
                R0=0, R1=0 (slow mode defa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MPU VECTORS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65522/3 FFF2/3  SWI 3 Vector mapped to 49138/9 BFF2/3&lt;br /&gt;
65524/5 FFF4/5  SWI 2 vector           49140/1 BFF4/5&lt;br /&gt;
65526/7 FFF6/7  FIRQ  vector           49142/3 BFF6/7&lt;br /&gt;
65528/9 FFF8/9  IRQ   vector           49144/5 BFF8/9&lt;br /&gt;
65530/1 FFFA/B  SWI 1 vector           49146/7 BFFA/B&lt;br /&gt;
65532/3 FFFC/D  NMI   vector           49148/9 BFFC/D&lt;br /&gt;
65534/5 FFFE/F  RESET vector           49150/1 BFFE/F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maestrosoftware</name></author>
		
	</entry>
</feed>