Artificer wrote: Sat Apr 19, 2025 5:34 pm
Martin said:
I have had another go at modifying the QLib runtimes for the Q60 problems.
Hi Martin, I have good news this time. Programs such as QCoCo, ACP, EddIcon, My screen copier, and others that do not have older runtimes incorporated seem to run correctly, smsq/e 3.42 plus copyback.
However this is not true for all, SQRview (runtimes not incorporated) opens it windows correctly but creates a FOR type error when a image file is loaded for conversion.
It will take a while to check everything. For example qtrans ( which has runtimes incorporated ) does not run as is. If it is bodged to disconnet the run times then it appears to run OK browsing the drives but when it comes to executing a file via FileInfo2 it hangs. However it runs OK with Wolfgang Lenerz patch, so for some programs this patch is the solution and if writing new software, best to avoid FOR loops whear REPeat loops can be used.
So insummary at the moment with only a short time to test it looks as if your modification of QLib is great, although there are issues with some programs such as SQRview.
I will continue to test.
Cheers
Just noticed, I forgot to put the most important file in the zip
It's very possible I have missed more of the places that need the modification doing.
Any program that has the runtimes included is likely to fail, Also as I have made the runtimes bigger, things have moved inside it. There are some bits of code which don't seem to get called from within the runtimes itself. I don 't know if they are bits of redundant code that the programmers never removed, or bits of diagnostic code, or code that is called from some other part of QLiberator, like externals.
It might be worth testing programs that are still giving problems in QPC2, with the Q60 runtimes installed. Just to check if it still works OK
I also noticed this, look for the bit marked <<<<<<-----------
Code: Select all
; code 84 - assign a variable (string?)
L0D8E move.w (a4)+,d4 ;read variable reference from program
move.w $00(a2,d4.w),d5
move.l $04(a2,d4.w),d0
; Q60 test patch
bclr #$1E,d0
bclr #$1D,d0
movea.l d0,a3 ;A3 should now be clean
cmpi.w #$0300,d5 ;substring
bcc.s L0DF8 ;..no
; Substring and upwards
move.b #$02,$00(a2,d4.w) ;change type to a normal variable
subq.b #$02,d5
beq.s L0E06 ;float
bcs.s L0E1E ;string
; Integer
move.w -(a5),d1 ;read the type stack
subq.b #$02,d1
bgt.s L0DF2 ;integer
; What's this
btst #$05,$04(a2,d4.w) <<<<<<-----------
beq.s L0DEC
; The bit is set
move.w #$0202,$00(a2,d4.w) ;set type to float variable
move.l $0002(a3),d5 ;get pointer to name list entry
tst.b d1
beq.s L0DCA ;float?
; A3 is the address to the variables area
bsr L0FEC ;convert a decimal to a float
It tests bit 5, I don't know why. It's too low down to be a flag like the others.
I have not investigated it any further, yet.
I also noticed
Code: Select all
Possible bug in runtimes
; Scan the name table we just created
; Loop start
L03D2 move.b (a0),d2 ;upper byte of type word
move.w (a0)+,d1 ;whole type word
beq.s L03F6 ;undefined (odd type 00?) converts to integer
; Normal type
subq.b #$03,d2
beq.s L03E8 ;sub string, or arrays
subq.b #$02,d1
beq.s L03F0 ;float
subq.b #$01,d1
beq.s L03F0 ;integer
; Is this a bug, should it be D2, not D1
subq.b #$04,d1
beq.s L03FC ;what's this? converts to float, type 07?
; Anything else or
; sub string, or arrays
L03E8 addq.l #$06,a0
It does not seem to make sense to me. But if the D1 was changed to D2 then it does.