Detailed Memory Map


#FILE: $RCSfile: memmap.txt $
#DESC: Dragon 32/64 Memory Map (with CoCo refs)
#REV: $Revision: 1.13 $
#DATE: $Date: 1995/08/18 15:37:28 $
#AUTHOR: Graham E. Kinns
#DISCLAIMER: All information provided as is etc.
#ARCHIVE: This file is part of the DRGNINFO collection of Dragon info files
#CONTACT: Comments, bugs, revisions, suggestions to Dragon@grempc.demon.co.uk
#HISTORY: 1.0  19/06/93 - Initial revision started
#RCSID: $Id: memmap.txt 1.13 1995/08/18 15:37:28 Graham Exp $

Format conventions:
  $xxxx references a memory address
  0xab or 0xabcd are C style hexadecimal constants
  %TITLE% shows a 'standard' assembler reference
  UPPERCASE words typically refer to Basic keywords or Assembler mneumonics
  (0x1234) Numbers in brackets refer to the default value at switch on
  {1} Numbers in braces refer to reference sources - see section at end

Abbreviations:
  CoCo	refers to the Tandy CoCo only
  D32	only applicable to Dragon 32
  D64	only applicable to Dragon 64
  DOS	refers to a generic DragonDos compatible unless stated otherwise
  lsb	least significant byte
  msb	most significant byte
  ptr	pointer (or address of)
  w/o	without

$0000		BREAK message flag - if negative print BREAK
$0001		String delimiting char (0x22 '"')
$0002		Another delimiting char (0x22 '"')
$0003		General counter byte
$0004		Count of IFs looking for ELSE
$0005		DIM flag
$0006		%VALTYP% Variable type flag (0x00 numeric, Non-0x00 string)
$0007		Garbage collection flag
$0008		Subscript allowed flag
$0009		INPUT/READ flag
$000a		Arithmetic use
$000b:000c	String ptr first free temporary
$000d:000e	String ptr last free temporary
$000f-0018	Temporary results
$0019:001a	Start address of BASIC program ($1e01, $2401 with DOS)
$001b:001c	Start address of simple variables
$001d:001e	Start address of array variables
$001f:0020	End of storage, Start of unused mem after BASIC program
$0021:0022	Top of stack, growing down ($7e36)
$0023:0024	Top of free string space ($7ffe)
$0025:0026	Temp Ptr to string in string space
$0027:0028	Top of Ram available to BASIC - returned by DOS HIMEM ($7ffe)
$0029:002a	Last/CONT line number
$002b:002c	Temp/Input line number store
$002d:002e	Ptr to next statement to be executed
$002f:0030	Direct mode command text pointer
$0031:0032	Current DATA statement line number
$0033:0034	Ptr to next item in current DATA statement
$0035:0036	Ptr to keyboard input buffer
$0037:0038	Ptr to variable last in use
$0037:0038	ASCII codes of last variable used {1}
$0039:003a	VARPTR address of last variable used
$003b-004e	Evaluation variables
$0041:0042	High end destination addr for block
$0043:0044	High end origin addr
$0045:0046	Low end destination addr for block
$0047:0048	Low end origin addr
$004f-0054	Floating Point Accumulator Num 1
$004f		Exponent
$0050-0053	Mantissa
$0050:0051	16 bit values in FAC stored here
$0052:0053	VARPTR of variables is stored here {1}
$0054		Mantissa Sign (0x00 positive, 0xff negative)
$0055		Temp sign of FAC
$0056		String variable length
$0057-005b	String Descriptor temporaries
$005c-0061	Floating Point Accumulator Num 2
$0062		Sign comparison
$0062-0067	Misc use
$0063		CoCo - Extended precision byte {1} - also Dragon ?
$0068:0069	Current Line number (0xffff in direct mode)
$006a-006e	Device Params used in PRINT
$006a		Device Comma field width (VDU - 0x10)
$006b		Device Last comma field
$006c		Device Current column num (VDU - 0x00-0x1f)
$006d		Device Line width - num chars per line (VDU 0x20)
$006e		Cassette I/O in progress flag - 0xff on input or output
		  occurring  {9}
$006f		%DEVNUM% Current device number
			0x00 VDU screen
			0x01-0x04 DOS - DosPlus only - drive number.
			0xfd serial port (Dragon 64 only)
			0xfe printer
			0xff tape
$0070		Cassette EOF flag - non-zero if EOF - used by EOF(-1) {9}
$0071		Restart flag - if not 0x55 cold start on reset, see $0072
$0072:0073	Restart vector - Following a reset if $0072 pts to a
		  NOP opcode and $0071 is 0x55 then a warm start is
		  performed to this vector else a cold start. (0xb44f)
		  (DOS SuperDosE6 $c706)
$0074:0075	Physical end of Ram minus 1 (0x7ffe)
$0076:0077	Unused
$0078		Cassette status
			0x00 closed
			0x01 input
			0x02 output
$0079		Cassette I/O - Buffer size - bytes in block
$007a:007b	Header buffer addr - ptr to filename block
$007c		%BLKTYP% Cassette block type
			0x00 filename
			0x01 data
			0xff EOF block
$007d		%DBLEN% Cassette block length, number bytes read/to write
$007e:007f	%DBADR% Cassette I/O Buffer address
		  Contains 1 + End address of last program loaded
$0080		Cassette I/O - block checksum used internally
$0081		Cassette I/O - error code
			0x00 none
			0x01 CRC (checksum) error
			0x02 attempt to load into ROM
$0082		Cassette I/O - Pulse width counter
$0083		Cassette I/O - Sync bits counter
$0084		Cassette I/O - Bit phase flag
$0085		Last sine wave value for output to DAC
$0086		Data for low res SET/RESET, POINT routines
$0087		ASCII code of last key pressed (cleared by Break check)
$0088:0089	Current VDU cursor addr (typ 0x0400-0x05ff)
$008a:008b	Gen purpose 16bit scratch pad / 16bit zero (0x0000) {2}
$008a:008b	CoCo - Motor on delay
$008c		Sound pitch frequency
$008d:008e	Gen purpose countdown (?sound timer {2})
$008f		Cursor flash counter (0x20)
$0090:0091	Cassette leader byte count - number of 0x55 bytes written
		  as sync leader (D32 - 0x0080, D64 - 0x0100)
$0092		Minimum cycle width of 1200Hz (0x12)
$0092:0093	CoCo - Cassette leader byte count
$0093		Minimum pulse width of 1200Hz (0x0a)
$0094		Maximum pulse width of 1200Hz (0x12)
$0095:0096	Motor on delay (0xda5c = approx 0.5s)
$0095:0096	CoCo - Serial Baud rate constant (0x0057 = 600 baud)
$0097:0098	Keyboard scan debounce delay constant (0x045e)
$0097:0098	CoCo - Serial Line Printer End of Line delay (0x0001)
$0099		Printer comma field width (0x10 = 16) 
$009a		Printer last comma field (0x74 = 116) (CoCo 0x70 = 112)
$009b		Printer line width dflt (0x84 = 132)
$009c		Printer head column posn == POS(-2)
		  Updated by LPOUT ($800f) routine
$009d:009e	EXEC default entry address
		 (D32 - $8b8d = ?FC ERROR; D64 - $bf49 = Boot 64k mode)
$009f-00aa	%CHRGET% Self modifying routine to read next char
$009f:00a0	INC <$A7
$00a1:00a2	BNE $00A5
$00a3:00a4	INC <$A6
$00a5-00a7	LDA >xxxx
$00a6:00a7	Ptr to next character to read
$00a8-00aa	JMP $BB26
$00ab-00ae	Used by RND
$00af		TRON/TROFF trace flag - non zero for TRON
$00b0:00b1	Ptr to start of USR table ($0134; DOS - $0683)
$00b2		Current foreground colour (0x03)
$00b3		Current background colour (0x00)
$00b4		Temp/active colour in use
$00b5		Byte value for current colour - ie bit pattern
$00b6		Graphics PMODE number in use (0x00)
$00b7:00b8	Ptr to last byte+1 of current graphics mode ($0c00 w/o Dos)
$00b9		Number of bytes per line in current PMODE (0x10)
$00ba:00bb	Ptr to first byte of current graphics mode ($0600)
$00bc		Msb of start of graphics pages (0x06 or 0x0c with Dos)
$00bd:00be	Current X cursor position (not user available ?{1})
$00bf:00c0	Current Y cursor position (not user available ?{1})
$00c1		Colour set currently in use (0x08 if colorset 1 {1})
$00c2		Plot/Unplot flag: 0x00 reset, non zero set
$00c3:00c4	Current horizontal pixel number
$00c5:00c6	Current vertical pixel number
$00c7:00c8	Current X cursor coord (0x0080)
$00c9:00ca	Current Y cursor coord (0x0060)
$00cb:00cc	CIRCLE command X coood as if drawn in PMODE 4
$00cd:00ce	CIRCLE command Y coord as if drawn in PMODE 4
$00cf:00d0	CIRCLE radius as if drawn in PMODE 4
$00cf:00d0	RENUM increment value
$00d1:00d2	RENUM start line
$00d3:00d4	CLOADM 2's complement load offset
$00d5:00d6	RENUM new start line
$00d7		EDIT line length (not user available)
$00d7		PLAY - 
$00d8		PLAY - bytes left in string
$00d9:00da	PLAY - ptr to current char in string
$00d8-00dd	Graphics use ? {2}
$00de		PLAY: Current octave in use (0-4) (0x02)
$00df:00e0	PLAY: Volume data for volume setting (D32 - 0xba42)
		  (D64 - 0xb844)
$00e1		PLAY: Current note length (0x04)
$00e2		PLAY: Current tempo (0x02)
$00e3:00e4	PLAY: Music duration count
$00e5		PLAY: Music dotted note flag
$00e6-$00ff	D32 - Unused in Dragon 32 w/o DOS
$00e6		CoCo - baud rate constant
$00e7		Coco - Input timeout constant
$00e8		Current angle used in DRAW {1} (??)
$00e9		Current scale used in DRAW {1} (??)
$00ea-00f6	DOS - Used by DragonDos
$00f8		DOS - sector currently seeking {SuperDos Rom}
$0100-0102	SWI3 Secondary vector (Uninitialised)
$0103-0105	SWI2 Secondary vector (Uninitialised)
$0106-0108	SWI Secondary vector (Uninitialised)
$0109-010b	NMI Secondary vector (Uninitialised)
		  (CoCo DOS JMP $d7ae; SuperDos E6 JMP $c71e)
$010c-010e	IRQ Secondary vector - JMP $9d3d
		  (CoCo JMP $a9b3 or $894c (extended); CoCo DOS JMP $d7bc;
		   SuperDos E6 JMP $c727)
$010f-0111	FIRQ Secondary vector - JMP $b469
		  (CoCo JMP $a0f6; SuperDos E6 JMP $c7da)
$0112:0113	TIMER value
$0114		Unused
$0115-0119	Random number seeds (0x80, 0x4f, 0xc7, 0x52, 0x59)
$011a-011f	D32 - Unused
$011a		D64 - %FLAG64% checked on Reset from 64K mode
		  if 0x55 then checksum at $011b is checked against
		  current contents of Ram, if the same then a warm start
		  is performed (64 mode) else a cold start (32 mode)
$011a		CoCo - Caps lock, 0x00 lower, non-0x00 upper
$011b:011c	D64 - %CSUM64% 16bit sum of words of BASIC Rom-in-ram in
		  64K mode from $c000 to $feff
$011b:011c	CoCo - Keyboard Delay constant
$011d-011f	CoCo - JMP $8489 ? {1}
$011d		D64 - %LSTKEY% Last key code return by keybd poll routine
$011e		D64 - %CNTDWN% Auto repeat countdown
$011f		D64 - %REPDLY% Auto repeat inter-repeat delay value (0x05)
$0120		%STUB0% Stub 0 - Number of reserved words (0x4e)
$0121:0122	Stub 0 - Ptr to reserved words table ($8033)
$0123:0124	Stub 0 - Ptr to reserved words dispatch table ($8154)
$0125		Stub 0 - Number of functions (0x22)
$0126:0127	Stub 0 - Ptr to reserved function words table ($81ca)
$0128:0129	Stub 0 - Ptr to function words dispatch table ($8250)
$012a		%STUB1% Stub 1 - Number of reserved words (0x00)
		  (DOS 0x1a)
$012b:012c	Stub 1 - Ptr to reserved words table (0x0000)
		  (DOS $ded4; SuperDosE6 $deda)
$012d:012e	Stub 1 - Ptr to reserved words token processing routine
		  ($89b4; DOS $c64c; SuperDosE6 $c670)
$012f		Stub 1 - Number of functions (0x00)
		  (DOS 0x07)
$0130:0131	Stub 1 - Ptr to function table (0x0000)
		  (DOS $debb; SuperDosE6 $dec1)
$0132:0133	Stub 1 - Ptr to function token processing routine
		  ($89b4; DOS $c667; SuperDosE6 $c68b)
$0134		%STUB2% Stub 2 - acts as a stub terminator under DOS
$0134-0147	USR address table, relocated by DOS (10 x 2 bytes) ($8b8d)
$0148		Auto line feed flag on buffer full - setting this to 0x00
		  causes a EOL sequence to be sent to printer when buffer
		  reaches length in $009b (0xff)
$0149		Alpha Lock flag	- 0x00 Lower case, 0xff Upper case (0xff)
$014a-0150	Line Printer End of line termination sequence
$014a		Number of bytes in EOL sequence 1-6 (0x01)
$014b		EOL chr 1 (0x0d CR)
$014c		EOL chr 2 (0x0a LF)
$014d		EOL chr 3 (D64 - 0x00; D32 - 0x20 ' ')
$014e		EOL chr 4 (D64 - 0x00; D32 - 0x44 'D' Duncan)
$014f		EOL chr 5 (D64 - 0x00; D32 - 0x4e 'N' N.)
$0150		EOL chr 6 (D64 - 0x00; D32 - 0x4f 'S' Smeed)
$0151-0159	Keyboard matrix state table
$0152-0159	CoCo - Keyboard roll-over table
$015a-015d	%POTVAL% Joystick values (0-63)
$015a		Right Joystick, x value == JOYSTK(0)
$015b		Right Joystick, y value == JOYSTK(1)
$015c		Left Joystick, x value == JOYSTK(2)
$015d		Left Joystick, y value == JOYSTK(3)
$015e-01a8	Ram hooks - each is called from ROM with a JSR before
		  carrying out the specified function
$015e-0160	Device Open
		  (DOS JMP $d902; SuperDosE6 $d8f4)
$0161-0163	Verify Device Number
		  (DOS SuperDosE6 JMP $d8ec)
$0164-0166	Device Init
		  (DOS SuperDosE6 JMP $c29c)
$0167-0169	Output char in A to DEVN
		  (DOS JMP $d8fa; SuperDosE6 $d90b)
$0167		Setting to 0xff disables keyboard ?!? {1}
		Setting to 0x39 (RTS) allows use of SCREEN 0,1 etc. ??{1}
$016a-016c	Input char from DEVN to A
		  (DOS SuperDosE6 JMP $c29c)
$016d-016f	Input from DEVN using INPUT
		  (DOS SuperDosE6 JMP $c29c)
$0170-0172	Output to DEVN using PRINT
		  (DOS SuperDosE6 JMP $c29c)
$0173-0175	Close all files
		  (DOS SuperDosE6 JMP $c29c)
$0176-0178	Close file
		  (DOS JMP $d917; SuperDosE6 $d6f5)
$0179-017b	Command Interpreter - interpret token in A as command 
		  (DOS SuperDosE6 JMP $c29c)
$017c-017e	Re-request input from keyboard
		  (DOS JMP $d960; SuperDosE6 $d954)
$017f-0181	Check keys - scan for BREAK, SHIFT+'@'
		  (DOS SuperDosE6 JMP $c29c)
$017f		Setting this to 0x9e disables LIST/DIR {1}
$0182-0184	Line input from DEVN using LINE INPUT
		  (DOS JMP $d720; SuperDosE6 $dac5)
$0185-0187	Close BASIC file read in and goto Command mode
		  (DOS SuperDosE6 JMP $c29c)
$0188-018a	Check EOF on DEVN
		  (DOS JMP $dd4d; SuperDosE6 $dd54)
$018b-018d	Evaluate expression
		  (DOS SuperDosE6 JMP $c29c)
$018e-0190	User error trap, called from $8344
 		  (DOS SuperDosE6 JMP $c29c)
$0191-0193	System error trap, called from $8344
  		  (DOS JMP $c69e; SuperDosE6 $c6c5)
$0194-0196	Run Link - used by DOS to RUN filename
		  (DOS JMP $d490; SuperDosE6 $d4b7)
$0197-0199	Reset Basic Memory, editing or entering BASIC lines
$019a-019c	Get next command - reading in next command to be executed
$019d-019f	Assign string variable
$01a0-01a2	Screen access - CLS, GET, PUT
$01a3-01a5	Tokenise line
$01a6-01a8	De-Tokenise line
$01a9-01d0	String buffer area
$01d1		Cassette filename length in range 0-8
$01d2-01d9	Cassette filename to search for or write out
$01da-02d8	Cassette I/O default data buffer - 255 bytes
$01da-0268	D64 - 64K mode bootstrap routine is copied here to run
$01da-01e1	Cassette buffer - filename of file read
$01e2		Cassette buffer - filetype 
			0x00 BASIC program
			0x01 Data
			0x02 Machine code
$01e3		Cassette buffer - ASCII flag
			0x00 Binary
			0xff ASCII flag
$01e4		Cassette buffer - gap flag
			0x00 Continous
			0xff Gapped file
$01e5:01e6	Cassette buffer - Entry (Exec) addr of m/c file
$01e7:01e8	Cassette buffer - Load address for ungapped m/c file
$02d9-02dc	BASIC line input buffer preamble
$02dd-03d8	BASIC line input buffer - used for de-/tokenising data
$02dd-03dc	CoCo - 255 byte keyboard buffer {1}
$02e1-033b	CoCo - 90 byte screen buffer {1}
$03d9-03ea	Buffer space
$03eb-03fc	Unused
$03fd-03ff	D32 - Unused in Dragon 32
$03fd:03fe	D64 - Printer end of line delay in milliseconds (0x0000)
$03ff		D64 - %PRNSEL% selects default printer port
		  0x00 Parallel, non-0x00 Serial (0x00)
$0400-05ff	Default Text screen
$0600-1dff	Available graphics pages w/o DOS
$0600-0bff	DOS - workspace area see also $00ea-$00f6
$0600-0dff	CoCo DOS workspace area (no more info)
$0c00-23ff	DOS - Available graphics pages
$8000-bfff	BASIC ROM in 32K mode
$8000-9fff	CoCo - Extended Color BASIC ROM
$a000-bfff	CoCo - Color BASIC ROM
$bff0-bfff	These addresses mapped from ROM to $fff0-$ffff by the SAM
$c000-dfff	DOS - Dos ROM
$c000-feff	DOS - Cumana DOS ROM only
$c000-feff	Available address range to cartridge expansion port 32K mode
$c000-feff	D64 - 64K mode - copy of BASIC ROM 2 exists in RAM here
$ff00		PIA 0 A side Data reg.
	  PA7    i/p	Comparator input
	  PA6    i/p	Keyboard Matrix   Ent Clr Brk N/c N/c N/c N/c Shift
	  PA5    i/p	Keyboard Matrix   X   Y   Z   Up  Dwn Lft Rgt Space
	         i/p	CoCo - Keyboard   8   9   :   ;   ,   -   .   /
	  PA4    i/p	Keyboard Matrix   P   Q   R   S   T   U   V   W
	         i/p	CoCo - Keyboard   0   1   2   3   4   5   6   7
	  PA3    i/p	Keyboard Matrix   H   I   J   K   L   M   N   O
	         i/p	CoCo - Keyboard   X   Y   Z   Up  Dwn Lft Rgt Space
	  PA2    i/p	Keyboard Matrix   @   A   B   C   D   E   F   G
	         i/p	CoCo - Keyboard   P   Q   R   S   T   U   V   W
	  PA1    i/p	Keyboard Matrix   8   9   :   ;   ,   -   .   /
	         i/p	CoCo - Keyboard   H   I   J   K   L   M   N   O
		 i/p	Left Joystick Button
	  PA0    i/p	Keyboard Matrix   0   1   2   3   4   5   6   7
	         i/p	CoCo - Keyboard   @   A   B   C   D   E   F   G
		 i/p	Right Joystick Button
$ff01		PIA 0 A side Control reg.
	  CA1    i/p	Horiz Sync Interrupt from VDG (15625Hz; CoCo 15750Hz)
	  CA2    o/p	Analogue Mux channel select line A
	            	Selects Joystick Axis (0 x-axis, 1 y-axis)
$ff02		PIA 0 B side Data reg.
	  PB7    o/p	Keyboard Matrix   7   /   G   O   W   Space  Shift
	         o/p	Printer Out bit 7
	  PB6    o/p	Keyboard Matrix   6   .   F   N   V   Right  N/c
	         o/p	Printer Out bit 6
	  PB5    o/p	Keyboard Matrix   5   -   E   M   U   Left   N/c
	         o/p	Printer Out bit 5
	  PB4    o/p	Keyboard Matrix   4   ,   D   L   T   Down   N/c
	         o/p	Printer Out bit 4
	  PB3    o/p	Keyboard Matrix   3   ;   C   K   S   Up     N/c
	         o/p	Printer Out bit 3
	  PB2    o/p	Keyboard Matrix   2   :   B   J   R   Z      Break
	         o/p	Printer Out bit 2
	  PB1    o/p	Keyboard Matrix   1   9   A   I   Q   Y      Clear
	         o/p	Printer Out bit 1
	  PB0    o/p	Keyboard Matrix   0   8   @   H   P   X      Enter
	         o/p	Printer Out bit 0
$ff03		PIA 0 B side Control reg.
	  CB1    i/p	Field Sync Interrupt from VDG (50Hz; CoCo 60Hz)
	  CB2    o/p	Analogue Mux channel select line B
			Selects Joystick (0 right, 1 left)
$ff04		D64 - ACIA serial port read/write data reg.
$ff05		D64 - ACIA serial port status (R)/ reset (W) reg.
$ff06		D64 - ACIA serial port command reg.
$ff07		D64 - ACIA serial port control reg.
$ff20		PIA 1 A side Data reg.
	  PA7    o/p	DAC bit 5
	  PA6    o/p	DAC bit 4
	  PA5    o/p	DAC bit 3
	  PA4    o/p	DAC bit 2
	  PA3    o/p	DAC bit 1
	  PA2    o/p	DAC bit 0
	  PA1    o/p	Printer Strobe - Active High (i.e. Lo-Hi-Lo to print)
	         o/p	CoCo - RS232 Tx o/p
	  PA0    i/p	Cassette waveform single bit input
$ff21		PIA 1 A side Control reg.
	  CA1    i/p	Printer Acknowledge
	         i/p	CoCo - CD RS232 Carrier Detect input
	  CA2    o/p	Cassette Relay Motor control
$ff22		PIA 1 B side Data reg.
	  PB7    o/p	*A/G VDG control line
	  PB6    o/p	GM2 VDG control line
	  PB5    o/p	GM1 VDG control line
	  PB4    o/p	GM0 or *INT/EXT VDG control line
	  PB3    o/p	CSS VDG control line
	  PB2    i/p	D32 - RAM size (0 8 x 32K bit; 1 16 x 16K bit) {6}
	         o/p	D64 - ROM select (1 32K mode; 0 64K mode)
	  PB1    i/p	Sample audio source
	         o/p	Single bit sound output
	  PB0    i/p	Printer Busy - Active High
	         i/p	CoCo - RS232 Rx input
$ff23		PIA 1 B side Control reg.
	  CB1    i/p	Cartridge CART FIRQ auto-start signal
	  CB2    o/p	Sound Mux enable (1 enable, 0 single bit sound)
$ff40		DOS - Disk Controller command/status reg.
$ff41		DOS - Disk Controller track reg.
$ff42		DOS - Disk Controller sector reg.
$ff43		DOS - Disk Controller data reg.
$ff48		DOS - Disk Controller hardware control reg.
$ffc0-ffdf	SAM (Synchronous Address Multiplexer) register bits - use
		  even address to clear, odd address to set
$ffc0-ffc5	SAM VDG Mode registers V0-V2
$ffc0/ffc1	SAM VDG Reg V0
$ffc2/ffc3	SAM VDG Reg V1
$ffc3/ffc5	SAM VDG Reg V2
$ffc6-ffd3	SAM Display offset in 512 byte pages F0-F6
$ffc6/ffc7	SAM Display Offset bit F0
$ffc8/ffc9	SAM Display Offset bit F1
$ffca/ffcb	SAM Display Offset bit F2
$ffcc/ffcd	SAM Display Offset bit F3
$ffce/ffcf	SAM Display Offset bit F4
$ffd0/ffc1	SAM Display Offset bit F5
$ffd2/ffc3	SAM Display Offset bit F6
$ffd4/ffd5	SAM Page #1 bit - in D64 maps upper 32K Ram to $0000 to $7fff
$ffd6-ffd9	SAM MPU Rate R0-R1
$ffd6/ffd7	SAM MPU Rate bit R0
$ffd8/ffd9	SAM MPU Rate bit R1
$ffda-ffdd	SAM Memory Size select M0-M1
$ffda/ffdb	SAM Memory Size select bit M0
$ffdc/ffdd	SAM Memory Size select bit M1
$ffde/ffdf	SAM Map Type - in D64 switches in upper 32K RAM $8000-$feff
$ffec-ffef	PC-Dragon - Used by Paul Burgin's emulator to provide enhanced
		  services
$fff0-ffff	6809 interrupt vectors mapped from $bff0-$bfff by SAM
$fff0:fff1	Reserved ($0000; D64 64K mode 0x3634 '64')
$fff2:fff3	SWI3	 ($0100)
$fff4:fff5	SWI2	 ($0103)
$fff6:fff7	FIRQ	 ($010f)
$fff8:fff9	IRQ	 ($010c)
$fffa:fffb	SWI	 ($0106)
$fffc:fffd	NMI	 ($0109)
$fffe:ffff	RESET	 ($b3b4; D64 64K mode $c000 - never accessed)

ROM routines
============

    This section is now contained in the file romref.txt

Dragon DOS ROM routines
=======================

    This is now part of drgndos.txt


References
==========

{1}	'The Dragon Notebook', Ray Smith, NDUG.
{2}	'Inside the Dragon', Duncan Smeed and Ian Sommerville,
	   Addison-Wesley, 1983.
{3}	'TRS-80 Color Computer Tech Ref Manual', Tandy Corp, 1981.
{4}	WD2797 Floppy Disc Driver Controller Data Sheet (RS #6991).
{5}	Dragon Disc Controller Circuit Diagram, ex Dragon Data Ltd, now NDUG.
{6}	Dragon 32/64 Upgrade Manual, R. Hall, NDUG, 1985.

Various Articles appearing in Dragon User magazine:
{7}	'Inside the 32', Dave Barnish, p13, Jan 1987.
{8}	'BREAKing the '64', Martyn Armitage, p8-9, Feb 1988.
{9}	'Firmware - Part 1', Brian Cadge, p19, Sep 1985.
{10}	'Dragon Answers', Brian Cadge, p31, Sep 1985.

Acknowledgements
================

PC CoCo Emulator (coco2-13.zip) by Jeff Vavasour, without the excellent
debugger / monitor included with the package checking some of the above
would have been a lot harder.

Ray Smith for the Dragon Notebook which was a major source and inspiration.

Back to Index