Morning all,

I'm doing a bit more work on the next exciting episode of QL Today's LibGen utility. I have spotted a huge pair of bugs in my code, viz:


li_libfile equ $03
...

li_unav    move.l #$11111111,ws_litem+li_libfile(a1)
           bra.s li_rdrw
...
li_avail   move.l #$01011101,ws_litem+li_libfile(a1)
li_rdrw    moveq #-1,d3
           jmp wm_ldraw(a2)

The idea was to set 4 consecutive loose item status bytes to unavailable (#wsi_mkun) in the first case, and to set three of them to available (#wsi_mkav) and one to unavailable (#wsi_mkun) in the second case.

The code above is a huge problem because li_libfile is odd, A1 is even as is ws_litem at $40. I would expect an address exception at the very least.

Running the code under QMON2 shows that I'm attempting to store a long word at $43(a1) where a1 is $4ABBA6. That works out at $4ABBE9 which is most definitely odd.

In QPC, version 3.33, the above works without any exceptions. PRINT PROCESSOR gives 20, I must assume that either a 68020 doesn't barf at a long word access to an odd address or something is not working correctly any more!

I've checked and rechecked my paper and pdf copies of the Motorola processor manual, and there is no mention that you can do a long move to an odd address.

I'm not running any "monitor" code that would intercept the address exceptions and quietly swallow it.

I have stepped through the code for both, and it works, the MOVE.L is carried out, after executing the code at li_avail, I can see the following results at $43(a1) in QMON2:

    QMON> d $43(a1) 4
    4ABBE9  0101 0101 004E FF6F  .....NV.

Is it any wonder I'm confused?

What am I missing?


Cheers,
Norm.

--
Norman Dunbar
Dunbar IT Consultants Ltd

Registered address:
Thorpe House
61 Richardshaw Lane
Pudsey
West Yorkshire
United Kingdom
LS28 7EL

Company Number: 05132767
_______________________________________________
QL-Users Mailing List
http://www.q-v-d.demon.co.uk/smsqe.htm

Reply via email to