[Coco] Assembler Help

Charles Shrader charles.shrader at gmail.com
Sat Aug 16 22:50:51 EDT 2008


Hi all!  I thought I'd break into something other than the recent copyright
discussion and ask for some help with an odd Assembler language question.

I'm using EDTASM++.BIN.  I've written a very simple program that clears the
screen, then waits for the user to type in eight characters.  Once eight
characters have been typed in, the program outputs to the screen a space,
then outputs a repeat of the string.  Very simple.

When I assemble and run this in the Z-Debugger, it runs fine, although the
RTS at the end of the code causes unusual results.  But I can see before the
system goes hay-wire that on the top line, my entry is repeated:

ABCDEFGH ABCDEFGH.

This runs fine also if I change the RTS line to a line that just brances to
itself over and over.  This keeps the system from going nuts.

Now if I compile the program to disk and execute the .BIN file, my output
is:

ABCDEFGH BCDEFGH

(Where did the first A go in the echoed second string??)

I'm totally perplexed as to why this is happening.  It's like my x index is
not pointing to the correct start byte of STMP.  (See below)

I'll include the code below; perhaps someone here more knowledgeable than I
may be able to figure out what's going on.  I'm doing this in the David Keil
emulator for the Coco3 with 128K RAM:

00100                ORG             $3F00   ;Start location of code
00110 START          JSR             43304   ;Clear Screen
00120                LDB             #0      ;Initialize register B
00130                LDA             #0      ;Initialize Accumulator
00135                STA             DEVNUM  ;Output to screen
00140                LDX             STMP    ;Load start address of storage
location STMP
00150 LOOP           JSR             $A1C1   ;Poll for keypress
00160                CMPA            #0      ;Compare vs 0.  If 0, no key
was pressed.
00170                BEQ             LOOP    ;No keypress so keep polling
00180                STA             ,X+     ;Store keypress in STMP and
move byte pointer
00190                JSR             [40962] ;Output keypress to screen
00192                INCB                    ;Increment counter
00194                CMPB            #8      ;See if 8 keys have been
pressed
00200                BNE             LOOP    ;Keep polling until 8 keys have
been pressed
00210                LDX             STMP    ;Point to start of STMP so we
can echo output
00220                LDA             #32     ;Load A with ASCII code for
'Space'
00230                JSR             [40962] ;Output character to screen
00240 LOOP2          LDA             ,X      ;Load A with first character of
stored string
00250                JSR             [40962] ;Output to screen
00260                CMPX            #8      ;Have we displayed all 8
characters?
00270                BNE             LOOP2   ;If not, get next character in
string
00280                RTS                     ;Return to caller
00290 STMP           RMB             $09     ;Define storage area STMP
00300 DEVNUM         EQU             $6F     ;Location where output is
designated
00310                END             START

Thanks for any help,

Chuck




More information about the Coco mailing list