Emulator Enhanced MC6809 Instructions v1.00
|
Return to emulator documentation
Operation: M:M+1 << M x M+1
Format:
Opcode Operands
FDB $1000
Description:
Multiply value in memory location M by value in memory location M+1. Result is stored in M:M+1.
CYCLES: 2
Condition Bits Affected:
V: Clear if M is zero; set otherwise
C: Clear if M is zero; set otherwise
Example:
100
LDU
#WORK ;
load U with pointer to work area
110
LDD
#$1540 ; load D
w/2 8 bit value to multiply
120
STD
U
; store values in work area
130
FDB
$1000 ;
multiply 8 bit unsigned values
.
.
.
200 WORK FDB
$0000 ; 8
bytes of work area used by all
210
FDB $0000
; the
enhanced MC6809 instructions
220
FDB $0000
230
FDB $0000
After execution M:M+1 will contain 0540h and the C and V condition bits are set.
Operation: M:M+1:M+2:M+3 << M:M+1 x M+2:M:3
Format:
Opcode Operands
FDB $1001
Description:
Multiply value in memory location M:M+1 by
value in memory location M+2:M+3.
Result is stored in M:M+1:M+2:M+3.
CYCLES: 2
Condition Bits Affected:
V: Clear if M:M+1 is zero; set otherwise
C: Clear if M:M+1 is zero; set otherwise
Example:
100
LDU
#WORK ;
load U with pointer to work area
110 LDD
#$2175 ;
load D w/16 bit divisor
120 STD
U ;
store in work area
130 LDD
#$40 ;
load D w/16 bit dividend
140 STD
2,U ;
store in work area
150 FDB
$1002 ;
divide 16 bit unsigned values
.
.
.
200 WORK FDB
$0000 ;
8 bytes of work area used by all
210 FDB
$0000 ;
the enhanced MC6809 instructions
220 FDB
$0000
230 FDB
$0000
After execution M+2:M+3 will contain 0085h, M:M+1 will contain 0035h and the C and V condition bits are clear.
Operation: remainder (M:M+1), quotient (M+2:M+3) << M+2:M+3 / M:M+1
Format:
Opcode Operands
FDB $1002
Description:
Divide value in memory location M+2:M+3 by
value in memory location M:M+1.
Quotient is stored in M+2:M+3, the remainder is stored in M:M+1.
CYCLES: 2
Condition Bits Affected:
V: Set if divide by zero; reset otherwise
C: Set if divide by zero; reset otherwise
Example:
100
LDU
#WORK
; load U with pointer to work area
110 LDD
#$2175 ;
load D w/16 bit divisor
120 STD
U
; store in work
area
130 LDD
#$40
; load D w/16 bit dividend
140 STD
2,U
; store in work area
150 FDB
$1002
; divide 16 bit unsigned values
.
.
.
200 WORK FDB
$0000
; 8 bytes of work area used by all
210 FDB
$0000
; the enhanced MC6809 instructions
220 FDB
$0000
230 FDB
$0000
After execution M+2:M+3 will contain 0085h, M:M+1 will contain 0035h and the C and V condition bits are clear.
Operation: remainder
(M:M+1:M+2:M+3), quotient (M+4:M+5:M+6:M+7) <<
M+4:M+5:M+6:M+7
/ M:M+1:M+2:M+3
Format:
Opcode Operands
FDB $1003
Description:
Divide value in memory location M+4:M+5:M+6+M+7
by value in memory location M:M+1:M+2:M+3.
Quotient is stored in M+4:M+5:M+6:M+7, the remainder is stored in
M:M+1:M+2:M+3.
CYCLES: 2
Condition Bits Affected:
V: Set if divide by zero; reset otherwise
C: Set if divide by zero; reset otherwise
Example:
100
LDU
#WORK
; load U with pointer to work area
110 LDD
#$40
; load D w/1st 16 bits of divisor
120 STD
U
; store in work
area
130 LDD
#$2175 ;
load D w/2nd 16 bits of divisor
140 STD
2,U
; store in work area
150 LDD
#$01
; load D w/1st 16 bits of dividend
160 STD
4,U
; store in work area
170 LDD
#$4578 ;
load D w/2nd 16 bits of dividend
180 STD
6,U
; store in work area
190 FDB
$1003
; divide 16 bit unsigned values
.
.
.
300 WORK FDB $0000
; 8
bytes of work area used by all
310 FDB $0000
; the
enhanced MC6809 instructions
320 FDB $0000
330 FDB $0000
After execution M+4:M+5:M+6:M+7 will contain 00000032h, M:M+1:M+2:M+3 will contain 00009005h and the C and V condition bits are clear.
Operation: M:M+1 << M x M+1
Format:
Opcode Operands
FDB $1004
Description:
Preform a signed multiply of the value in memory location M by value in memory location M+1. Result is stored in M:M+1.
CYCLES: 2
Condition Bits Affected:
V: Clear if M:M+1 = sign-extend of M+1 to 16 bits & no overflow; set otherwise
C: Clear if M:M+1 = sign-extend of M+1 to 16 bits & no overflow; set otherwise
Example:
100
LDU
#WORK ;
load U with pointer to work area
110 LDD
#$2175 ;
load D w/16 bit divisor
120 STD
U ;
store in work area
130 LDD
#$40 ;
load D w/16 bit dividend
140 STD
2,U ;
store in work area
150 FDB
$1002 ;
divide 16 bit unsigned values
.
.
.
200 WORK FDB
$0000 ;
8 bytes of work area used by all
210 FDB
$0000 ;
the enhanced MC6809 instructions
220 FDB
$0000
230 FDB
$0000
After execution M+2:M+3 will contain 0085h, M:M+1 will contain 0035h and the C and V condition bits are clear.
Operation: M:M+1:M+2:M+3 << M:M+1 x M+2:M:3
Format:
Opcode Operands
FDB $1005
Description:
Multiply value in memory location M:M+1 by
value in memory location M+2:M+3.
Result is stored in M:M+1:M+2:M+3.
CYCLES: 2
Condition Bits Affected:
V: Clear if M:M+1:M+2:M+3 = sign-extend of M+2:M+3 to 32 bits & no overflow;
set otherwise
C: Clear if M:M+1:M+2:M+3 = sign-extend of M+2:M+3 to 32 bits & no overflow;
set otherwise
Example:
100
LDU
#WORK ;
load U with pointer to work area
110 LDD
#$2175 ;
load D w/16 bit divisor
120 STD
U ;
store in work area
130 LDD
#$40 ;
load D w/16 bit dividend
140 STD
2,U ;
store in work area
150 FDB
$1002 ;
divide 16 bit unsigned values
.
.
.
200 WORK FDB
$0000 ;
8 bytes of work area used by all
210 FDB
$0000 ;
the enhanced MC6809 instructions
220 FDB
$0000
230 FDB
$0000
After execution M+2:M+3 will contain 0085h, M:M+1 will contain 0035h and the C and V condition bits are clear.
Operation: remainder (M:M+1), quotient (M+2:M+3) << M+2:M+3 / M:M+1
Format:
Opcode Operands
FDB $1006
Description:
Divide value in memory location M+2:M+3 by
value in memory location M:M+1.
Quotient is stored in M+2:M+3, the remainder is stored in M:M+1.
CYCLES: 2
Condition Bits Affected:
V: Set if divide by zero or overflow; reset otherwise
C: Set if divide by zero or overflow; reset otherwise
Example:
100
LDU
#WORK
; load U with pointer to work area
110 LDD
#$2175 ;
load D w/16 bit divisor
120 STD
U
; store in work
area
130 LDD
#$40
; load D w/16 bit dividend
140 STD
2,U
; store in work area
150 FDB
$1002
; divide 16 bit unsigned values
.
.
.
200 WORK FDB
$0000
; 8 bytes of work area used by all
210 FDB
$0000
; the enhanced MC6809 instructions
220 FDB
$0000
230 FDB
$0000
After execution M+2:M+3 will contain 0085h, M:M+1 will contain 0035h and the C and V condition bits are clear.
Operation: remainder
(M:M+1:M+2:M+3), quotient (M+4:M+5:M+6:M+7) <<
M+4:M+5:M+6:M+7
/ M:M+1:M+2:M+3
Format:
Opcode Operands
FDB $1007
Description:
Divide value in memory location M+4:M+5:M+6+M+7
by value in memory location M:M+1:M+2:M+3.
Quotient is stored in M+4:M+5:M+6:M+7, the remainder is stored in
M:M+1:M+2:M+3.
CYCLES: 2
Condition Bits Affected:
V: Set if divide by zero or overflow; reset otherwise
C: Set if divide by zero or overflow; reset otherwise
Example:
100
LDU
#WORK
; load U with pointer to work area
110 LDD
#$40
; load D w/1st 16 bits of divisor
120 STD
U
; store in work
area
130 LDD
#$2175 ;
load D w/2nd 16 bits of divisor
140 STD
2,U
; store in work area
150 LDD
#$01
; load D w/1st 16 bits of dividend
160 STD
4,U
; store in work area
170 LDD
#$4578 ;
load D w/2nd 16 bits of dividend
180 STD
6,U
; store in work area
190 FDB
$1003
; divide 16 bit unsigned values
.
.
.
300 WORK FDB $0000
; 8
bytes of work area used by all
310 FDB $0000
; the
enhanced MC6809 instructions
320 FDB $0000
330 FDB $0000
After execution M+4:M+5:M+6:M+7 will contain 00000032h, M:M+1:M+2:M+3 will contain 00009005h and the C and V condition bits are clear.
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $1008
Description:
Shell to DOS and execute the command pointed to by register M:M+1. If the command is null (only a zero terminator) then this function shells to a DOS prompt. If Z condition bit is set then the command executed ok else register A contains the error number.
If register A is non-zero then a push any key to continue message will be displayed when the command finishes before the COCO screen is re-displayed.
CYCLES: 2
Condition Bits Affected:
Z: Set if shell command ok; reset otherwise
Example:
100
LDU
#WORK
; load U with pointer to work area
110 LDD
#CMD
; load D with address of
command
120 STD
U
; string
and store in work area
130 LDA
#$01
; display push any key to
continue message
140 FDB
$1008
; execute shell command
.
.
.
200 CMD FCC
'DIR'
; zero terminated command to
execute
210 FCB
$00
220 WORK FDB
$0000 ;
8 bytes of work area used by all
230 FDB
$0000 ;
the enhanced MC6809 instructions
240 FDB
$0000
250 FDB
$0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $100A
Description:
Read the PC port pointed to by M:M+1 into register A.
CYCLES: 2
Condition Bits Affected: none
Example:
100
LDU
#WORK
; load U with pointer to work area
110 LDD
#$0201 ;
load D with address of PC game port
120 STD
U
; store in work
area
130 FDB
$100A
; read PC port and store in A
.
.
.
300 WORK FDB $0000
; 8
bytes of work area used by all
310 FDB $0000
; the
enhanced MC6809 instructions
320 FDB $0000
330 FDB $0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $100B
Description:
Write register to the PC port pointed to by M:M+1.
CYCLES: 2
Condition Bits Affected: none
Example:
100
LDU
#WORK
; load U with pointer to work area
110 LDD
#$0201 ;
load D with address of PC game port
120 STD
U
; store in work
area
130 LDA
#$0FF
; load A with value to write to port
140 FDB
$100B
; store A in PC port
.
.
.
300 WORK FDB $0000
; 8
bytes of work area used by all
310 FDB $0000
; the
enhanced MC6809 instructions
320 FDB $0000
330 FDB $0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $100C
Description:
Read the PC memory address pointed to by register M:M+1 : M+2:M+3 into register A. Register M:M+1 contains the PC segment and M+2:M+3 contains the address within the segment.
CYCLES: 2
Condition Bits Affected: none
Example:
100
LDU
#WORK ; load U with pointer to work
area
110
LDD
#$0040 ; load D with segment address
120
STD U
; store in work
area
130
LDD
#$0000 ; load D with memory address
140
STD
U ; store in work
area
150
FDB
$100C ; read address 0040h:0000h into A
.
.
.
300 WORK FDB $0000
; 8
bytes of work area used by all
310 FDB $0000
; the
enhanced MC6809 instructions
320 FDB $0000
330 FDB $0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $100D
Description:
Read the PC memory address pointed to by register M:M+1 : M+2:M+3 into register A. Register M:M+1 contains the PC segment and M+2:M+3 contains the address within the segment.
CYCLES: 2
Condition Bits Affected: none
Example:
100
LDU
#WORK
; load U with pointer to work area
110 LDD
#$0040 ; load D
with segment address
120 STD
U
; store in work area
130 LDD
#$0000 ; load D
with memory address
140 STD
U
; store in work
area
150 FDB
$100C ;
read address 0040h:0000h into A
.
.
.
300 WORK FDB $0000
; 8
bytes of work area used by all
310 FDB $0000
; the
enhanced MC6809 instructions
320 FDB $0000
330 FDB $0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $100E
Description:
Set CPU speed to value defined by register A.bits 0-1
bits 0-1
00 2/1.77mhz
01 4mhz
10 1mhz
11 8mhz
bit 2 Turbo speed if set
bit 3 Speed port locked if set
CYCLES: 2
Condition Bits Affected: none
Example:
100
LDA
#$03
; load A with value for 3.58mhz
110
FDB
$100E ; set speed
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $100F
Description:
Get CPU speed and return value in register A.
bits 0-1
00 2/1.77mhz
01 4mhz
10 1mhz
11 8mhz
bit 2 Turbo speed if set
bit 3 Speed port locked if set
CYCLES: 2
Condition Bits Affected: none
Example:
110 FDB $100E ; get speed
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $1010
Description:
Opens the file specified by the path pointed to by M:M+1. The path must conform to PC standards and be zero terminated. M+2:M+3 is used to define the type of file access. If the file is being created M+4:M+5 is used to define the access permission.
If the open is successful the Z condition bit
is set and the file's channel is returned in M+4:M+5 else the Z
condition bit is reset, and the A register contains the error
number.
File Access:
File Access:
M+2:M+3, bits 0-1:
00 open file read only
01 open file write only
10 open file read/write
bit 6 create file if doesn't
exist (create)
bit 7 used only with bit 6 set. If file exists,
an error is returned
bit 9 if file exists then file is truncated
(truncate)
bit 10 the file pointer will be set to the end of the file
prior to each write (append)
File Access Permission:
M+4:M+5:
bit 7 if set, permission to write to file
bit 8 if set, permission to read to file
NOTE: only has effect when file is being created. To allow read & write access both bits must be set.
CYCLES: 2
Condition Bits Affected:
Z: Set if file opened ok; reset otherwise
Example:
100
LDU
#WORK ; load U with
pointer to work area
110
LDD
#PCFN ; load D
w/address of filename
120
STD U
;
store in work area
130
LDD
#$0241 ; create or truncate
file & open
140
STD
2,U ; in
write only mode
150
LDD
#$0180 ; create file with
read & write
160
STD
4,U ;
permission
170
FDB
$1010 ; execute open
command
180
BNE
ERROR ; jump if
error
190
LDD
4,U ; save
channel #
200
STD
CHAN
.
.
.
300 PCFN FCC
'PCFILE.BIN' ; zero
terminated filespec to open
310 FCB
$00
320 CHAN FDB $0000
; saved channel number
330 WORK FDB
$0000 ;
8 bytes of work area used by all
340 FDB
$0000 ;
the enhanced MC6809 instructions
350 FDB
$0000
360 FDB
$0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $1011
Description:
Closes file on channel specified by M+4:M+5. The Z condition bit is set if close successful else the Z condition bit is reset and the A register contains the error number.
CYCLES: 2
Condition Bits Affected:
Z: Set if file closed ok; reset otherwise
Example:
100
LDU
#WORK ; load U with pointer
to work area
110 LDD
CHAN
; load D with channel
#
120 STD
4,U
; store in work area
130 FDB
$1011
; execute close command
140 BNE
ERROR
; jump if
error .
.
.
.
300 CHAN FDB $0000
; saved channel number
310 WORK FDB
$0000 ;
8 bytes of work area used by all
320 FDB
$0000 ;
the enhanced MC6809 instructions
330 FDB
$0000
340 FDB
$0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $1012
Description:
Read the number of bytes defined by register M+2:M+3 into the buffer area pointed to by M:M+1 from the channel defined by M+4:M+5. If the Z condition bit is set then the read was successful, M+2:M+3 will contain the number of bytes actually read and the buffer will contain the data read. If M+2:M+3 is less than the value before execution of the instruction and there was no error then the end of file was reached. If an read error occurred then the Z condition bit is reset and M+2:M+3 will contain the number of bytes actually read and register A will contain the error number.
It is possible to read 0001h to 2000h bytes in a single read.
CYCLES: 2
Condition Bits Affected:
Z: Set if file read ok; reset otherwise
Example:
100
LDU
#WORK ; load U with
pointer to work area
110
LDD
#BUFF ; load D
w/address of buffer
120
STD U
;
store in work area
130
LDD
CHAN ; load D
with channel #
140
STD
4,U ; store
in work area
150
LDD
#$0100 ; store number of
bytes to read
160
STD 2,U
170
FDB
$1012 ; execute read
command
180
BNE
ERROR ; jump if error
190
CMPD
2,U ; all bytes
read?
200
BNE
ERROR ; jump if not
.
.
.
300 BUFF FCB
$00
; 256 bytes of storage space
.
.
.
320 CHAN FDB $0000
; saved channel number
330 WORK FDB
$0000 ;
8 bytes of work area used by all
340 FDB
$0000 ;
the enhanced MC6809 instructions
350 FDB
$0000
360 FDB
$0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $1013
Description:
Write the number of bytes defined by M+2:M+3 from the buffer area pointed to by M:M+1 to the channel defined by M+4:M+5. If the Z condition bit is set then the write was successful, M+2:M+3 will contain the number of bytes actually read and the buffer will be unchanged. If an read error occurred then the Z condition bit is reset and M+2:M+3 will contain the number of bytes actually written & register A will contain the error number.
It is possible to write 0001h to 2000h bytes in a single write. If M+2:M+3 contains 0000h then the file will be truncated at the current file pointer location.
CYCLES: 2
Condition Bits Affected:
Z: Set if file write ok; reset otherwise
Example:
100
LDU
#WORK ; load U with
pointer to work area
110
LDD
#BUFF ; load D
w/address of buffer
120
STD U
;
store in work area
130
LDD
CHAN ; load D
with channel #
140
STD
4,U ; store
in work area
150
LDD
#$0100 ; store number of
bytes to read
160
STD 2,U
170
FDB
$1013 ; execute write
command
180
BNE
ERROR ; jump if error
190
CMPD
2,U ; all bytes
written?
200
BNE
ERROR ; jump if not
.
.
.
300 BUFF FCB
$00
; 256 bytes of storage space
.
.
.
320 CHAN FDB $0000
; saved channel number
330 WORK FDB
$0000 ;
8 bytes of work area used by all
340 FDB
$0000 ;
the enhanced MC6809 instructions
350 FDB
$0000
360 FDB
$0000
Operation: Emulator Instruction (DOS Int 21h Function 42h)
Format:
Opcode Operands
FDB $1014
-or-
FDB $101D
Description:
Set the file position to the 32 bit signed integer value defined by M:M+1:M+2:M+3 using the method defined in register A. If successful the Z condition bit is set and the 32 bit signed integer value M:M+1:M+2:M+3 is updated with the new file position. If an error occurs then the Z condition bitg is reset and register A contains the error number.
Using method 1 or 2 it is possible to position beyond the start of the file without an error, an error will occur upon a subsequent read or write to the file.
Method code:
A = 0 absolute byte offset from beginning of
file (always positive double integer)
A = 1 byte offset from current location (positive or negative
double integer)
A = 2 byte offset from end of file (positive or negative double
integer)
The $101D command will truncate or extend the file to the new position.
CYCLES: 2
Condition Bits Affected:
Z: Set if file seek ok; reset otherwise
Example:
100
LDU
#WORK ; load U with
pointer to work area
110
LDD #$00
; load D w/new file
position
120
STD U
;
store in work area
130
LDD #$0100
140
STD 2,U
150
LDD CHAN
; load D with channel
#
160
STD
4,U ;
store in work area
170
FDB
$1014 ; execute seek
command
180
BNE
ERROR ; jump if error
.
.
.
300 BUFF FCB
$00
; 256 bytes of storage space
.
.
.
320 CHAN FDB $0000
; saved channel number
330 WORK FDB
$0000 ;
8 bytes of work area used by all
340 FDB
$0000 ;
the enhanced MC6809 instructions
350 FDB
$0000
360 FDB
$0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $1015
Description:
Builds error message in buffer pointed to by M:M+1 for the error number in register A. If the length of the buffer is not able to hold the entire message the message is truncated to fit and register A contains range error, else register A is set to zero.
CYCLES: 2
Condition Bits Affected:
Z: always set
Example:
100
LDU
#WORK ; load U with
pointer to work area
110
LDD CHAN
; load D with channel
#
120
STD
4,U ;
store in work area
130
FDB
$1011 ; execute close
command
140
BNE
ERROR ; jump if error
.
.
.
200 ERROR LDD
#BUFF ; load D
with address of buffer
210
STD U
; store in work area
220
LDD
#$0100 ; load D with
length of buffer
230
STD
2,U ;
store in work area
240 FDB
$1015 ; execute
error message command
.
; upon return the error message is in
.
; buffer, zero terminated
.
300 BUFF FCB
$00
; 256 bytes of storage space
.
.
.
320 CHAN FDB $0000
; saved channel number
330 WORK FDB
$0000 ;
8 bytes of work area used by all
340 FDB
$0000 ;
the enhanced MC6809 instructions
350 FDB
$0000
360 FDB
$0000
Operation: Emulator Instruction (DOS Int 21h Function 4Eh)
Format:
Opcode Operands
FDB $1016
Description:
Given a file specification in the form of an ASCIIZ string, searches the default or specified directory on the default or specified disk drive for the first matching file. If a match is found the buffer pointed to by M:M+1 will be loaded with the file data found and the Z condition bit is set, else the Z condition bit is reset and register A contains the error number.
Wildcard characters ? and * are allowed in the filename. Files found are based on the attributes set in M+4:M+5.
WARNING: Buffer must be at least 43 bytes long but not longer than 255 bytes.
File Attributes:
M+4:M+5:
bit 0 read-only
bit 1 hidden
bit 2 system
bit 3 volume labels (if set only volume labels are returned)
bit 4 subdirectory; entry excluded from normal searches
bit 5 archive
Buffer Structure:
bytes 0-20 reserved for DOS on
subsequent calls
byte 21 attribute of
matching file
bytes 22-23 file time
bytes 24-25 file date
bytes 26-29 file size (32 bit integer)
bytes 30-42 filename & extension in form of ASCIIZ string
CYCLES: 2
Condition Bits Affected:
Z: Set if file match found; reset otherwise
Example:
100
LDU
#WORK ; load U with
pointer to work area
110
LDD
#BUFF ; load D with
address of buffer
120
STD U
;
store in work area
130
LDD
#43 ; load
D w/buffer length of 43 bytes
140
STD
2,U ; store
in work area
150
LDD
#$01 ; find all
normal and read only files
160
STD
4,U ; store
in work area
170
FDB
$1016 ; execute find
first command
180
BNE
ERROR ; jump if no
match found
300 BUFF FCB
$00
; 43-255 bytes of storage space
.
.
.
310 WORK FDB
$0000 ;
8 bytes of work area used by all
320 FDB
$0000 ;
the enhanced MC6809 instructions
330 FDB
$0000
340 FDB
$0000
Operation: Emulator Instruction (DOS Int 21h Function 4Fh)
Format:
Opcode Operands
FDB $1017
Description:
Assuming a successful previous FINDFIRST function the FINDNEXT function finds the next file in the default or specified directory on the default or specified disk drive that matches the original file specification. If a match is found the buffer pointed to by M:M+1 will be loaded with the file data found and the Z condition bit is set, else the Z condition bit is reset and register A contains the error number.
WARNING: Buffer must be at least 43 bytes long but not longer than 255 bytes.
Buffer Structure:
bytes 0-20 reserved for DOS on subsequent calls
byte 21 attribute of matching file
bytes 22-23 file time
bytes 24-25 file date
bytes 26-29 file size (32 bit integer)
bytes 30-42 filename & extension in form of ASCIIZ string
M CYCLES: 4 T STATES: 4 4 MHZ E.T.: 1.00
Condition Bits Affected:
Z: Set if file match found; reset otherwise
Example:
100
LDU
#WORK ; load U with
pointer to work area
110
LDD
#BUFF ; load D with
address of buffer
120
STD U
;
store in work area
130
LDD
#43 ; load
D w/buffer length of 43 bytes
140
STD
2,U ; store
in work area
170
FDB
$1017 ; execute find
next command
180
BNE
DIREND ; jump if no more
matching entries
.
.
.
300 BUFF FCB
$00
; 43-255 bytes of storage space
.
.
.
310 WORK FDB
$0000 ;
8 bytes of work area used by all
320 FDB
$0000 ;
the enhanced MC6809 instructions
330 FDB
$0000
340 FDB
$0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $1019
Description:
Open and load the binary file specified by the path pointed to by M:M+1. The path must conform to PC standards and be zero terminated. M+2:M+3 contains a load offset that is added to the object file's load addresses. Normally BC is zero.
If the load is successful the Z condition bit is set and M+2+M+3 contains the execution address. If the file was not found or was not a valid object file then the Z condition bit is reset and the A register contains the error number.
CYCLES: 2
Condition Bits Affected:
Z: Set if file opened ok; reset otherwise
Example:
100
LDU
#WORK ; load U with
pointer to work area
110
LDD
#PCFN ; load D
w/address of filename
120
STD U
;
store in work area
130
LDD
#$00 ; load D
w/zero (no load offset)
140
STD
2,U ; store
in work area
150
FDB
$1019 ; execute load
command
160
BNE
ERROR ; jump if error
170
JMP
[2,U] ; execute loaded
program
.
.
.
300 PCFN FCC
'POLARIS.BIN'; zero
terminated filespec to open
310 FCB
$00
320 WORK FDB
$0000 ;
8 bytes of work area used by all
330 FDB
$0000 ;
the enhanced MC6809 instructions
340 FDB
$0000
350 FDB
$0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $101A
Description:
Changes the current drive and directory to the path pointed to by the M:M+1. If the command is successful the Z condition bit is set else the Z condition bit is reset and the A register contains the error number.
CYCLES: 2
Condition Bits Affected:
Z: Set if file chdir ok; reset otherwise
Example:
100
LDU
#WORK ; load U with
pointer to work area
110
LDD
#PCFN ; load D
w/address of pathname
120
STD U
;
store in work area
130
FDB
$101A ; execute chdir
command
140
BNE
ERROR ; jump if error
.
.
.
300 PCFN FCC
'C:TRS80' ;
zero terminated pathspec to
310 FCB
$00 ;
change to
320 WORK FDB
$0000 ;
8 bytes of work area used by all
330 FDB
$0000 ;
the enhanced MC6809 instructions
340 FDB
$0000
350 FDB
$0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $101B
Description:
Gets the current working directory and drive. The path and drive are stored in the buffer pointed to by M:M+1. If the command is successful the Z condition bit is set else the Z condition bit is reset and the A register contains the error number. If the length of the buffer is not able to hold the entire path the path is truncated to fit and register A contains range error, else register A is set to zero.
CYCLES: 2
Condition Bits Affected:
Z: Set if file getdir ok; reset otherwise
Example:
100
LDU
#WORK ; load U with
pointer to work area
110 LDD
#BUFF
; load D with address
of buffer
120 STD
U
;
store in work area
130 LDD
#$0100
; load D with length of
buffer
140 STD
2,U
; store in
work area
150 FDB
$101B
; execute getdir
command
.
;
upon return the directory is in
.
; buffer, zero
terminated .
.
300 BUFF FCB
$00
; 256 bytes of storage space
.
.
.
310 WORK FDB
$0000 ;
8 bytes of work area used by all
320 FDB
$0000 ;
the enhanced MC6809 instructions
330 FDB
$0000
340 FDB
$0000
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $101E
Description:
Opens the file specified by the path pointed to by M:M=1. The path must conform to PC standards and be zero terminated. M+2:M+3 is used to define the type of file access. If the file is being created M+4:M+5 is used to define the access permission.
If the open is successful the Z condition bit is set and the file's channel is returned in M+4:M+5 else the Z condition bit is reset and the A register contains the error number.
Unlike the OPEN command this command is used in writing floppy & hard disk drivers for COCO DOS's.
If no path is given the current floppy path will be used (set in the floppy selection screen). If no extension is given the extension .DSK will be used.
If 'HARD-X' (where Y= a value of 0-3) is given as the filename then one of the 4 hard disk filenames defined in the configuration screen will be opened.
File Access:
M+2:M+3, bits 0-1:
00 open file read only
01 open file write only
10 open file read/write
bit 6 create file if doesn't
exist (create)
bit 7 used only with bit 6 set. If file exists,
an error is returned
bit 9 if file exists then file is truncated
(truncate)
bit 10 the file pointer will be set to the end of the file
prior to each write (append)
File Access Permission:
M+4:M+5:
bit 7 if set, permission to write to file
bit 8 if set, permission to read to file
NOTE: only has effect when file is being created. To allow read & write access both bits must be set.
CYCLES: 2
Condition Bits Affected:
Z: Set if file opened ok; reset otherwise
Example:
100
LDU #WORK
; load U with pointer
to work area
110 LDD
#HARD
; load D w/address of
filename
120 STD
U
;
store in work area
130 LDD
#$0002
; open in read/write mode
140 STD
2,U
; store in
work area
150 FDB
$101E
; execute open command
160 BNE
ERROR
;jump if error
170 LDD
4,U
; save
channel #
180 STD
CHAN
.
.
.
300 HARD FCC
'HARD-0'
; open defined COCO hard drive #0
310 FCB
$00
320 CHAN FDB $0000
; saved channel number
330 WORK FDB
$0000 ;
8 bytes of work area used by all
340 FDB
$0000 ;
the enhanced MC6809 instructions
350 FDB
$0000
360 FDB
$0000
If in the configuration screen the 'Virtual HD0 Filename' is defined as:
C:\TRS-80\OS9.HDV
Then, if the file exists, it will be opened for read/write I/O and the channel number returned in M+4:M+5.
Operation: Emulator Instruction
Format:
Opcode Operands
FDB $101F
Description:
Closes file on channel specified by M+4:M+5 or closes all open files if M+4:M+5=FFFFh. The Z condition bit is set if close successful else the Z condition bit is reset and the A register contains the error number.
If M+4:M+5=FFFFh then no error is reported even if no files are closed.
CYCLES: 2
Condition Bits Affected:
Z: Set if file closed ok; reset otherwise
Example:
100
LDU
#WORK ; load U with pointer
to work area
110 LDD
#$0FFFF
; load D with close all files command
120 STD
4,U
; store in work area
130 FDB
$101F
; execute closeall command
140 BNE
ERROR
; jump if error
.
.
.
300 CHAN FDB $0000
; saved channel number
310 WORK FDB
$0000 ;
8 bytes of work area used by all
320 FDB
$0000 ;
the enhanced MC6809 instructions
330 FDB
$0000
340 FDB
$0000