[Coco] 64K Coco mode and the MC6883
Arthur Flexser
flexser at fiu.edu
Tue Mar 28 03:10:19 EDT 2023
I agree. I should have said P=VARPTR(P$)+2: EXEC (256*PEEK(P) + PEEK(P+1)).
Would have been simpler to just poke the ML data values into a specified address and then execute that address. (Having made sure the address was protected from Basic such as by a CLEAR statement.)
Art
________________________________
From: Coco <coco-bounces at maltedmedia.com> on behalf of Dave Philipsen via Coco <coco at maltedmedia.com>
Sent: Tuesday, March 28, 2023 1:11 AM
To: coco at maltedmedia.com <coco at maltedmedia.com>
Cc: Dave Philipsen <dave at davebiz.com>
Subject: Re: [Coco] 64K Coco mode and the MC6883
So I'm not really familiar with using VARPTR because I don't program
much in BASIC. But from what is being stated here and on the Sub-Etha
site, VARPTR(P$) is actually a pointer that points to a string
descriptor, not the string itself. So if indeed the 3rd and 4th bytes of
that descriptor are actually the real starting address of the string,
P=VARPTR(P$)+2 : EXEC P will not work. EXEC P will transfer program
execution to the 3rd and 4th byte of the descriptor. These two bytes
contain an address, they don't contain executable code. Thus, this is
why the original instruction was to set P=VARPTR(P$)+1 : POKE P, 126 :
EXEC P. Now you are executing code which is the JMP instruction followed
by its operand which is the start address of the string.
Just thinking out loud here. I haven't tested this but that's the way
I'm seeing it.
-Dave
On 3/27/2023 2:30 AM, Arthur Flexser via Coco wrote:
> That is, I think the last part of line 10 should read simply, P=VARPTR(P$)+2
> (the +2 to access the 3rd byte of the 5-byte string descriptor).
>
> I see no need to add that JMP (126) byte.
>
> Art
>
>
> ________________________________
> From: Coco <coco-bounces at maltedmedia.com> on behalf of Arthur Flexser via Coco <coco at maltedmedia.com>
> Sent: Monday, March 27, 2023 3:01 AM
> To: CoCoList for Color Computer Enthusiasts <coco at maltedmedia.com>
> Cc: Arthur Flexser <flexser at fiu.edu>
> Subject: Re: [Coco] 64K Coco mode and the MC6883
>
> Line 20 should contain colons between the statements rather than semicolons. That would account for the ?SN error, at least.
>
> It looks to me like there's a programming error in line 10. The intent seems to be to poke the 59 bytes worth of ML code represented by the data values into a string, and then execute the string data where it winds up after being poked into memory.
>
> But VARPTR does not do this: it points to the location in the program's variable storage area just above the end of the program where the string descriptor is located. The third and fourth bytes of the string descriptor point to the memory location in the string storage area, near the top of memory, where the actual data values reside. Those are the bytes that the exec address should point to.
>
> Art
> ________________________________
> From: Coco <coco-bounces at maltedmedia.com> on behalf of RETRO Innovations via Coco <coco at maltedmedia.com>
> Sent: Monday, March 27, 2023 2:39 AM
> To: coco at maltedmedia.com <coco at maltedmedia.com>
> Cc: RETRO Innovations <go4retro at go4retro.com>
> Subject: Re: [Coco] 64K Coco mode and the MC6883
>
> Note: This message originated from outside the FIU Faculty/Staff email system.
>
>
> On 3/26/2023 8:18 PM, Sean Conner via Coco wrote:
>> 10 CLEAR 999:FOR I=1 TO 59:READ B:P$=P$+CHR$(B):NEXT I:P=VARPTR(P$)+1:POKE P,126
>> 20 PRINT"HIT ANY KEY TO RUN TEST";EXEC P;PRINT
>> 30 A=253:M$="ROM-1":GOSUB100
>> 31 A=A+1:M$="ROM-2":GOSUB100
>> 33 A=A+1:M$='ROM-3":GOSUB100
>> 40 END
>> 90 DATA 52,3,173,159,160,0,39
>> 91 DATA 250,26,80,79,183,255,223
>> 92 DATA 183,128,0,183,160,0,183
>> 93 DATA 192,0,76,183,255,222,183
>> 94 DATA 128,0,183,160,0,183,192
>> 95 DATA 0,183,255,223,182,128,0
>> 96 DATA 151,253,182,160,0,151
>> 97 DATA 254,182,192,0,151,255
>> 98 DATA 183,255,222,53,131
>> 100 PRINT M$;": ";
>> 110 IF PEEK(A)=1 THEN PRINT "NO SWITCH NEEDED" ELSE PRINT "SWITCH NEEDED"
>> 120 RETURN
> Hmmm, I copied that into a file, converted it to BASIC tokens with decb,
> and then ran it in XRoar using a CoCo2 NTSC.
>
> At first, I got a ?SN ERROR IN 20
>
> I replaced line 20 with EXEC P and then ran again. It then just went
> unresponsive.
>
> Can you verify this works for you? I tried on a real CoCo 2 with the
> same results.
>
> Jim
>
> --
> RETRO Innovations, Contemporary Gear for Classic Systems
> www.go4retro.com<http://www.go4retro.com>
> store.go4retro.com
>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>
--
Coco mailing list
Coco at maltedmedia.com
https://pairlist5.pair.net/mailman/listinfo/coco
More information about the Coco
mailing list