[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