Tandy CoCo EDTASM notes

From Wikistix

Disk EDTASM

DISK EDTASM+ 01.00.00
COPYRIGHT (C) 1983 BY MICROSOFT
Load offset: $1600
Exec address: $1600
Length: $3480

Disk EDTASM+ Overlay

DISK EDTASM+ 01.00.00  (OVRLAY)
COPYRIGHT (C) 1983 BY MICROSOFT
Load offset: $1600
Exec address: $1600
Length: $3b80

EDTASMD+

SUPER PATCHED EDTASM+ 1.0
 BY MICROSOFT
Load offset: $E00
Exec address: $E00
Length: $2A00

/BIN file format

Preamble/Postamble

To support overlays, multiple blocks are supported, with a final postamble.

Byte Preamble Postamble
0 00 preamble flag $ff postamble flag
1,2 Length of data block Two zero bytes
3,4 Load address EXEC address

There's also a pattern to follow for the assembly. Eg, the following puts the length of the code into the header:

00010         ORG     $4000
00020 BEGIN   JMP     START
00030         FDB     END-BEGIN
00040 START   …
…
00070         JMP     [$FFFE]
00080 END     EQU     *
00090         END     BEGIN

JMP [$FFFE] calls the reset vector, which is just like pushing the reset button.

Hello World

00010 * PROGRAM ORIGIN
00020         ORG     $4000
00030 * PREAMBLE FOR DISK LOADM
00040 BEGIN   JMP     START
00050         FDB     END-BEGIN
00060 * CLEAR SCREEN AT $400
00070 * TWO BYTES AT A TIME
00080 START   LDX     #SCREEN
00090         LDD     #$6060
00100 CLS1    STD     ,X++
00110         CMPX    #SCREEN+$200
00120         BNE     CLS1
00130 * WRITE STRING TO SCREEN
00140 * SCREEN ISN'T QUITE ASCII
00150 * MAP NON-ALPHA CHARS
00160         LDX     #SCREEN
00170         LDY     #HELLO
00180 WRT1    LDA     ,Y+
00190         BEQ     EXIT
00200         CMPA    #$40
00210         BHS     WRT2
00220         ADDA    #$40
00230 WRT2    STA     ,X+
00240         BRA     WRT1
00250 EXIT    JMP     [RESETV]
00260 HELLO   FCC     "HELLO WORLD!"
00270         FCB     0
00280 SCREEN  EQU     $400
00290 RESETV  EQU     $FFFE
00300 END     *
00310         END     BEGIN