[Coco] CCASM procedures working!

Mark Marlette mark at cloud9tech.com
Wed Dec 8 07:54:06 EST 2004


At 12/7/2004 09:43 PM -0600, you wrote:

Roger,

Looks good. Does your program after you define the "proc" fillmem's 
parameters prompt you for the "call" entry line the M$ Visual tools do? 
That way you don't have to go back and look a parameter format that you 
already defined to the program.

Mark


>Well, here is one of the first sample programs I assembled along with the 
>listing so you can see what code is generated automatically by the 
>assembler.  The programs I have tested are working, so I'll do a little 
>more testing before I release CCASM 2.93.
>
>In the following program, I define a procedure called "fillmem" which has 
>3 formal parameters: start, len, byte
>When I "call" the procedure, I pass in 3 values which are transposed to 
>their formals so that the procedure can access them.
>The parameters are accessed as offsets into the S stack.  Currently, there 
>is no support for local variables inside of procedures except for the 
>formal parameters.  I have not tested embedded procedures yet, where one 
>procedure calls another.
>
>
>         org     3584
>
>screen  equ     1024
>scrsiz  equ     512
>color   equ     128
>
>fillmem proc    start:word,len:word,filler:byte
>         ldx     start,s
>         lda     filler,s
>         ldy     len,s
>a@      sta     ,x+
>         leay    -1,y
>         bne     a@
>         rts
>         endproc
>
>start   call    fillmem,screen,scrsiz,color
>         call    fillmem,1024,512,128
>         rts
>
>         end     start
>
>
>the listing:
>
>CCASM 2.93: assembling cross6809.asm to pro.bin
>
>                                          org    3584
>
>               {$0400}  screen            equ    1024
>               {$0200}  scrsiz            equ    512
>               {$0080}  color             equ    128
>
>                        fillmem           proc 
> start:word,len:word,filler:byte
>  0E00 AE   62                            ldx    start,s
>  0E02 A6   66                            lda    filler,s
>  0E04 10AE 64                            ldy    len,s
>  0E07 A7   80          a@                sta    ,x+
>  0E09 31   3F                            leay   -1,y
>  0E0B 26   FA                            bne    a@
>  0E0D 39                                 rts
>                                          endproc
>
>  0E0E      8680        start             call 
> fillmem,screen,scrsiz,color
>  0E10      3402
>  0E12      CC
>  0E13      0200
>  0E15      3406
>  0E17      CC
>  0E18      0400
>  0E1A      3406
>  0E1C      BD
>  0E1D      0E00
>  0E1F      3265
>  0E21      8680                          call   fillmem,1024,512,128
>  0E23      3402
>  0E25      CC
>  0E26      0200
>  0E28      3406
>  0E2A      CC
>  0E2B      0400
>  0E2D      3406
>  0E2F      BD
>  0E30      0E00
>  0E32      3265
>  0E34 39                                 rts
>
>               {$0E0E}                    end    start
>
>
>color                    =[     0080]           _pr_fillmem_start 
>=[0002_0002]
>start                    =[     0E0E]           a at 0007 
>=[     0E07]
>_pr_fillmem_len          =[0002_0004]           screen 
>=[     0400]
>_pr_fillmem_filler       =[0001_0006]           scrsiz 
>=[     0200]
>_pr_fillmem              =[     0E00]           _pr_fillmem_3 
>=[0001_0006]
>_pr_fillmem_2            =[0002_0004]           _pr_fillmem_1 
>=[0002_0002]
>
>
>[22 lines] [No Errors] ['pro.bin' is 63 bytes long]
>
>
>Note that the automatic code created by the CALL function is not formatted 
>in the listing, so it looks kinda rough right now for those who can read 
>raw ML.  Still, this is major progress.
>
>Anybody up for writing a stdlib or graphics lib?  :)
>
>
>--
>Roger Taylor
>
>
>--
>Coco mailing list
>Coco at maltedmedia.com
>http://five.pairlist.net/mailman/listinfo/coco





More information about the Coco mailing list