[Coco] Assembly help: Corrupted bin file ?

Fedor Steeman petrander at gmail.com
Wed Dec 17 16:42:48 EST 2008


Hi,

I discovered it was just a typo! All is now working as expected and I look
forward to experimenting some more! :-)

Thanks for all the help, guys!

Cheers,
Fedor

2008/12/17 Fedor Steeman <petrander at gmail.com>

> Thanks Robert, you are being a great help!
>
> I must admit that I am going about this matter in a bit of a messy way. I
> have read and understood most of Barden's book amongst others, but since I
> never have the proper time to experiment with assembly I start forgetting
> even the most basic things again. Like most people, I learn best by doing.
> One of my problems has been a lack of a good assembler that I can move back
> and forth from whenever I find the time. The Portal-9 and RainbowIDE
> products are perfect for this, but for some reason I have never properly got
> them to work. The code fragment you are looking at actually is taken out of
> a CoCo program that I ran through a disassembler in order to analyse.
>
> What I am doing now is just running the CASM assembler on a command prompt
> while editing the source file in a text editor. Since I have VCC installed I
> can simply double-click the bin-file and it is automatically mounted in the
> emulator. This works fine with the bubblesort program provided in
> RainbowIDE. So I am not using a virtual diskette as a go-between but have
> the machine code directly written in the emulated memory and executed.
>
> I now made the necessary changes to the source code I showed you and it is
> mounted without problems! The program is executed in VCC and shows a pmode 4
> screen with vertical stripes as expected. However, the stripes aren't as
> narrow as I expect them to be. Using $AAAA which translates to binary 1010
> 1010 1010 1010, I would expect pixel-wide alternating black and white
> vertical lines. What I am getting, though, are much broader vertical black
> bars interrupted by paired vertical stripes. Any explanation for that?
>
> Cheers,
>
> Fedor
>
> 2008/12/17 Robert Gault <robert.gault at worldnet.att.net>
>
> Fedor,
>>
>> There could be several things wrong here depending on how you tried to use
>> this with VCC. There is also a problem with the source regards CCASM or any
>> of the assemblers that are used with a Coco.
>>
>> It would help to know how you tried to use this with VCC.
>>
>> Comments are inserted below.
>>
>>  "Fedor Steeman" <petrander at gmail.com> a écrit dans le message de news:
>>> dcc956220812162330t4b8be888je63b60fd6321d19f at mail.gmail.com...
>>>
>>>> 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
>>>>
>>>
>> This next can't be what you wanted. Almost certainly you intended to store
>> the value $AAAA into memory. That means the next line should be changed to
>>          LDD     #$AAAA
>>
>>        LDD     $AAAA     *3320: CC AA AA
>>>> Z3323   STD     ,X++      *3323: ED 81
>>>>       CMPX    #$1C00    *3325: 8C 1C 00
>>>>       BCS     Z3323     *3328: 25 F9
>>>>
>>>
>> There is no reason for the next line. It is not required for a timing
>> issue and certainly was not used to block out previous code. :)
>>
>>        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
>>>>
>>>
>> The next two lines have two problems, one already mentioned by another
>> reader is the keyboard is only checked once so any key press is likely to be
>> missed. The other is the use of JSR then RTS. Since the JSR already has an
>> RTS at its end, that results in RTS RTS which is a waste of space and time.
>> There are several ways of changing the code depending on whether you need
>> the value of the key pressed or are just waiting for any key to be pressed.
>> I prefer in the latter case to just use the Disk Basic code and JSR $ADFB.
>> In your code example, it would just be JMP $ADFB.
>> However, assuming you might want the value of the pressed key and using
>> the example of POLCAT, the lines should be
>>
>>   L1     JSR     [POLCAT]
>>          BEQ     L1
>>       do something with the key value
>>          RTS
>>
>>        JSR     [POLCAT]  *332E: AD 9F A0 00
>>>>       RTS               *3332:
>>>>
>>>
>> This needs and END statement and if you intended to LOADM the code it also
>> needs a reference to the execution address. The following changes are
>> needed.
>>
>> >>        ORG     $21FD
>> >> Start  LDX     #VIDRAM   *331D: 8E 04 00
>> ....
>> >>        JSR     [POLCAT]  *332E: AD 9F A0 00
>> >>        RTS               *3332:
>>          END     Start
>>
>>>
>>>> Using Roger Taylor's CCASM (as included in RainbowIDE) I get the
>>>> following
>>>> binary file:
>>>>
>>>>  The origin of the code is shown below (the 2421) but the length of the
>> sequence is zero (the first two 00 00). CCASM did not know how long your
>> program should be. Also you may not have selected the correct Object Output
>> in RainbowIDE.
>>
>>  00 00 24 21 FD 8E 04 00 FC AA AA ED 81 8C 1C 00
>>>> 25 F9 12 B7 FF C0 B7 FF C3 B7 FF C5 86 F8 B7 FF
>>>> 22 B7 FF C6 AD 9F A0 00 39
>>>>
>>>
>> As mentioned by another reader, there is no footer to this code to be used
>> by LOADM.
>>
>>
>>>> When I try to run this binary file using the VCC emulator I get an error
>>>> message stating that the binary file is corrupt.
>>>>
>>>> Can anyone help me try to understand whether there is anything wrong
>>>> with my
>>>> source code, the assembler (i.e. the resulting binary file) or the
>>>> emulator?
>>>>
>>>> Thanks in advance!
>>>>
>>>> Cheers,
>>>> Fedor
>>>>
>>>
>> You probably should indicate exactly how you asked RainbowIDE to compile
>> your code because there might be something wrong at that end of the process.
>>
>>
>> --
>> Coco mailing list
>> Coco at maltedmedia.com
>> http://five.pairlist.net/mailman/listinfo/coco
>>
>
>



More information about the Coco mailing list