[Coco] Assembly help: Corrupted bin file ?

Art Flexser flexser at fiu.edu
Thu Dec 18 17:14:36 EST 2008


You use multiple ORG statements, but there can be only one exec address for the
binary file.  You've specified two of them in your example.  (I'd assume most
assemblers would replace the first exec address ($2000) when the second ($7000)
is encountered.)  Use just a single END specifier to let the assembler know the
exec address for the binary.

Art

On Thu, 18 Dec 2008, Fedor Steeman wrote:

> Thanks Roger.
> 
> So, how do I code a multi-segment source file in assembly? Do I just use
> multiple origin statements? Like:
> 
>              ORG    $2000
> START   NOP
>              NOP
> END START
>              ORG    $7000
> STRT2   NOP
>              NOP
> END STRT2
> 
> Cheers,
> Fedor
> 
> 2008/12/18 Roger Taylor <operator at coco3.com>
> 
> > At 01:30 AM 12/17/2008, you wrote:
> >
> >> Hello everyone,
> >>
> >> I am still trying to learn assembly language but keep on running into
> >> problems.
> >>
> >> I have been trying to have the following source code assembled:
> >>
> >> VIDRAM  EQU     $0400     *Start of Video Display location
> >> V0CLR   EQU     $FFC0        *Clear bit for Sam Chip (Graphics mode)
> >> V1SET   EQU     $FFC3        *Set V1 bit in Sam Chip (Graphics mode)
> >> V2SET   EQU     $FFC5        *set V2 bit in Sam Chip (Graphics mode)
> >> VOFSET  EQU     $FFC6       *Display Offset Binary, This is the CLR Bit
> >> (Video page offset)
> >> VDGSET  EQU     $FF22        *PIA1 data port B: VDG Control output
> >> POLCAT  EQU     $A000        *Color Basic rom poll keyboard routine
> >>
> >>        ORG     $21FD
> >>        LDX     #VIDRAM   *331D: 8E 04 00
> >>        LDD     $AAAA     *3320: CC AA AA
> >> Z3323   STD     ,X++      *3323: ED 81
> >>        CMPX    #$1C00    *3325: 8C 1C 00
> >>        BCS     Z3323     *3328: 25 F9
> >>        NOP               *332A: 12
> >> PMODE4  STA     V0CLR     *2787: B7 FF C0
> >>        STA     V1SET     *278A: B7 FF C3
> >>        STA     V2SET     *278D: B7 FF C5
> >>        LDA     #$F8      *2790: 86 F8
> >>        STA     VDGSET    *2792: B7 FF 22
> >>        STA     VOFSET    *2795: B7 FF C6
> >>        JSR     [POLCAT]  *332E: AD 9F A0 00
> >>        RTS               *3332:
> >>
> >
> >
> > The source code above is missing two things:
> > the label of the starting line/address
> >
> > try:
> > EXEC   LDX #VIDRAM
> >
> > and the LOADM/EXEC finalizer is missing
> > the last line of the source code should be:
> >
> >   END  EXEC
> >
> > Now when you LOADM the program from BASIC, all you have to do is type EXEC
> > No address is needed as in EXEC #####.
> > If you just used END without an address, you'd have to type EXEC $21FD from
> > BASIC to run the program.
> >
> >
> >
> > --
> > Roger Taylor
> >
> > http://www.wordofthedayonline.com
> >
> >
> > --
> > Coco mailing list
> > Coco at maltedmedia.com
> > http://five.pairlist.net/mailman/listinfo/coco
> >
> 
> --
> Coco mailing list
> Coco at maltedmedia.com
> http://five.pairlist.net/mailman/listinfo/coco
> 




More information about the Coco mailing list