[Coco] Basic09 6309 version
zambotti at iinet.net.au
zambotti at iinet.net.au
Sun May 28 03:37:52 EDT 2017
James
I managed to test the basic09_6309 MOD function and that now works
correctly!
Walter
----- Original Message -----
From: "CoCoList for Color Computer Enthusiasts"
To:"CoCoList for Color Computer Enthusiasts"
Cc:
Sent:Fri, 26 May 2017 09:09:12 +0000
Subject:Re: [Coco] Basic09 6309 version
I've been following this thread today (well, yesterday now I suppose)
…
I have not given up on making modifications and improvements to VCC
… I still plan on getting around to “the list” on GitHub …
just have not had time since the beginning of the month. I’m hoping
in the next couple or three weeks to find some time.
Nonetheless – I added these two changes from Walter (thanks Walter
… if they work anyway, that is, ha! :)) – Walter, are you able to
compile and test the code? If not I’m providing it bellow … this
is now on my fork of VCC
https://github.com/jross9/VCC (contains all the current VCC 2.0.1b
changes + what I have done + Walters code)
I wasn’t going release executables until I got further along –
but well, what the heck … this is unofficial, think of it as beta
testing.
This zip contains executables (VS6 release compile) which includes
the changes I have done so far (the big one is the aspect ratio in
Window mode works, which is nice – make sure the setting is set in
config) there are others – you’d have to read my notes on my fork
on GitHub
http://jamesross.biz/VCC/VCC-JR_2017-05-26.zip
Diff view of walters changes
http://jamesross.biz/VCC/Untitled2.png
So copy these file from the zip folder
http://jamesross.biz/VCC/Untitled3.png
over a copy of and installed VCC like this
http://jamesross.biz/VCC/Untitled4.png
If anyone would like to try this and test Walters changes + I would
appreciate feedback if they find any problems w/ it ...
James
________________________________________
From: Coco on behalf of Walter Zambotti
Sent: Friday, May 26, 2017 7:14 AM
To: 'CoCoList for Color Computer Enthusiasts'
Subject: Re: [Coco] Basic09 6309 version
Further my last. DIVQ div by zero uses 21 less and not 13 less (which
is for DIVD)
Anyway with that here are the two hopefully corrected instructions
including corrected
cycle times and div by zero trapping.
case DIVQ_E: //11BE Phase 5 6309 CHECK
postword=MemRead16(IMMADDRESS(PC_REG));
if(postword)
{
temp32=Q_REG;
W_REG=temp32/(postword);
D_REG=temp32%(postword);
cc[N] = NTEST16(W_REG);
cc[Z] = ZTEST(W_REG);
cc[C] = W_REG&1;
cc[V] =1;
//NOT DONE
PC_REG+=2;
CycleCounter+=InsCycles[md[NATIVE6309]][M3726];
}
else
{
CycleCounter+=InsCycles[md[NATIVE6309]][M3726]-21;
DivByZero();
}
break;
case DIVQ_X: //11AE Phase 5 6309 CHECK
postword=MemRead16(INDADDRESS(PC_REG++));
if(postword)
{
temp32=Q_REG;
W_REG=temp32/(postword);
D_REG=temp32%(postword);
cc[N] = NTEST16(W_REG);
cc[Z] = ZTEST(W_REG);
cc[C] = W_REG&1;
cc[V] =1;
//NOT DONE
CycleCounter+=InsCycles[md[NATIVE6309]][M3635];
{
else
{
CycleCounter+=InsCycles[md[NATIVE6309]][M3635]-21;
DivByZero();
}
break;
-----Original Message-----
From: Coco [mailto:coco-bounces at maltedmedia.com] On Behalf Of Walter
Zambotti
Sent: Friday, 26 May 2017 3:03 PM
To: 'CoCoList for Color Computer Enthusiasts'
Subject: Re: [Coco] Basic09 6309 version
I have had a look at hd6309.c and there are a number of 'concerns'
relating to the 6309 emulation.
If you look at the DIVD_M/E/D instructions for instance the:
1. CycleCounter appears to be erroneously incremented twice in the E
& D variants:
2. The divide by zero cycle counter appears to be just plain wrong
25-13 should be 12 for instance.
There is an implementation of DIVQ_E how ever it doesn't implement
the correct cycle count for division by zero nor does it raise the div
by zero interrupt. I have added this to the X variant suggestion.
But given that I have provided an X variant suggestion further below.
Also the 6309 instruction set manual says this about the cycle
counter for most of the DIV instructions:
If a range overflow occurs, DIV? use 13 fewer cycles than what is
shown in the table.
Since determining an overflow still requires the full results to be
produced there should no difference to the cycle counter. I suggest
the manual should have said if a div by zero occurs then ...
It seems that incorrect cycle counters probably don't stop the
emulator from working fully but may affect timing dependant code.
case DIVD_M: //118D 6309 NITRO
*spostbyte=(signed char)MemRead8(PC_REG++);
if (*spostbyte)
{
*spostword=D_REG;
stemp16= (signed short)D_REG / *spostbyte;
A_REG = (signed short)D_REG % *spostbyte;
B_REG=(unsigned char)stemp16;
cc[Z] = ZTEST(B_REG);
cc[N] = NTEST16(D_REG);
cc[C] = B_REG
cc[V] =(stemp16 >127) | (stemp16 255) | (stemp16 < -256) ) //Abort
{
D_REG=abs (*spostword);
cc[N] = NTEST16(D_REG);
cc[Z] = ZTEST(D_REG);
}
CycleCounter+=25;
}
else
{
CycleCounter+=17;
DivbyZero();
}
break;
case DIVD_E: //11BD 6309 02292008 Untested
*spostbyte=(signed char)MemRead8(IMMADDRESS(PC_REG));
if (*spostbyte)
{
*spostword=D_REG;
stemp16= (signed short)D_REG / *spostbyte;
A_REG = (signed short)D_REG % *spostbyte;
B_REG=(unsigned char)stemp16;
cc[Z] = ZTEST(B_REG);
cc[N] = NTEST16(D_REG);
cc[C] = B_REG
cc[V] =(stemp16 >127) | (stemp16 255) | (stemp16 < -256) ) //Abort
{
D_REG=abs (*spostword);
cc[N] = NTEST16(D_REG);
cc[Z] = ZTEST(D_REG);
}
CycleCounter+=25; // So either this
}
else
{
CycleCounter+=17; //and this
DivbyZero();
}
CycleCounter+=InsCycles[md[NATIVE6309]][M2827];//or this but not both
break;
case DIVD_D: //119D 6309 02292008
*spostbyte=(signed char)MemRead8(DPADDRESS(PC_REG++));
if (*spostbyte)
{
*spostword=D_REG;
stemp16= (signed short)D_REG / *spostbyte;
A_REG = (signed short)D_REG % *spostbyte;
B_REG=(unsigned char)stemp16;
cc[Z] = ZTEST(B_REG);
cc[N] = NTEST16(D_REG);
cc[C] = B_REG
cc[V] =(stemp16 >127) | (stemp16 255) | (stemp16 < -256) ) //Abort
{
D_REG=abs (*spostword);
cc[N] = NTEST16(D_REG);
cc[Z] = ZTEST(D_REG);
}
CycleCounter+=27; // Increment here
}
else
{
CycleCounter+=19; // and here 27 -13 should be 14
DivbyZero();
}
CycleCounter+=InsCycles[md[NATIVE6309]][M2726]; // but NOT also here
break;
case DIVQ_E: //11BE Phase 5 6309 CHECK
postword=MemRead16(IMMADDRESS(PC_REG));
temp32=Q_REG;
W_REG=temp32/(postword);
D_REG=temp32%(postword);
cc[N] = NTEST16(W_REG);
cc[Z] = ZTEST(W_REG);
cc[C] = W_REG&1;
cc[V] =1;
//NOT DONE
PC_REG+=2;
CycleCounter+=InsCycles[md[NATIVE6309]][M3726];
break;
Suggested DIVQ_X instruction (based on DIVQ_E)
case DIVQ_X: //11AE Phase 5 6309 CHECK
postword=MemRead16(INDADDRESS(PC_REG++));
if(postword)
{
temp32=Q_REG;
W_REG=temp32/(postword);
D_REG=temp32%(postword);
cc[N] = NTEST16(W_REG);
cc[Z] = ZTEST(W_REG);
cc[C] = W_REG&1;
cc[V] =1;
//NOT DONE
CycleCounter+=InsCycles[md[NATIVE6309]][M3635];
{
else
{
CycleCounter+=InsCycles[md[NATIVE6309]][M3635]-13;
DivByZero();
}
break;
-----Original Message-----
From: Coco [mailto:coco-bounces at maltedmedia.com] On Behalf Of David
Ladd
Sent: Friday, 26 May 2017 1:19 PM
To: CoCoList for Color Computer Enthusiasts
Subject: Re: [Coco] Basic09 6309 version
James,
Thank you for pointing that out.
Actually I went through reviewing the hd6309c file and found several
6309 OpCodes that aren't implemented yet.
So we need to stay vigilant on making sure to test programs on real
CoCo's with real 6309's first before blaming the code/programs. As we
are finding out that VCC has some CPU instructions related to the 6309
that aren't supported yet.
Walter, good find and bringing this to the list. I am personally
surprised that we haven't had this happen more often.
More stuff to add to the list of things to work on.
+-----------------------------------------------------------------------+
| David Ladd a.k.a. PacoOtaktay a.k.a. Drencor |
| YouTube: http://www.youtube.com/user/PacoOtaktay |
| YouTube Gaming Live:
https://gaming.youtube.com/user/PacoOtaktay/live |
| Websites: http://dwladd.com & http://www.theterrorzone.com |
| G+: https://plus.google.com/113262444659438038657 |
| G+: https://plus.google.com/+DavidLaddPacoOtaktay |
| |
| Do you have your CoCo 3 yet? |
+-----------------------------------------------------------------------+
On Thu, May 25, 2017 at 4:13 PM, James Jones wrote:
> If https://github.com/VCCE/VCC is any indication, a number of the
> DIVQ_* cases in hd6309.c sit unimplemented--or more accurately, it
> looks like only DIVQ_E is implemented. The rest mostly emit a log
> message and all count the number of cycles the instruction takes.
>
> On Thu, May 25, 2017 at 3:22 PM, Wayne Campbell
> wrote:
>
> > I was just covering the bases. In the julian day thread it was
> > suggested
> I
> > try running the 6809 version in VCC and see what happens, so I
did.
> >
> > On Thu, May 25, 2017 at 12:07 PM, Bill Pierce via Coco <
> > coco at maltedmedia.com
> > > wrote:
> >
> > > The 6809 version of basic09 would not have a "divq" instruction
as
> that's
> > > exclusive to the 6309 processor, so it's only logical that if
the
> > > divq function of VCC is bugged, the 6809 software should run
fine.
> > > This only seems to be happening when that instruction is
encountered.
> > >
> > >
> > >
> > >
> > >
> > > Bill Pierce
> > > "Charlie stole the handle, and the train it won't stop going,
no
> > > way to slow down!" - Ian Anderson - Jethro Tull
> > >
> > > My Music from the Tandy/Radio Shack Color Computer 2 & 3
> > > https://sites.google.com/site/dabarnstudio/
> > > Co-Contributor, Co-Editor for CocoPedia
> > > http://www.cocopedia.com/wiki/index.php/Main_Page
> > >
> > > E-Mail: ooogalapasooo at aol.com
> > >
> > >
> > >
> > >
> > >
> > > -----Original Message-----
> > > From: Wayne Campbell
> > > To: CoCoList
> > > Sent: Thu, May 25, 2017 1:54 pm
> > > Subject: Re: [Coco] Basic09 6309 version
> > >
> > > Oh, and I was still emulating the 6309 processor.On May 25,
2017
> > > 10:53
> > AM,
> > > "Wayne Campbell" wrote:> I put the 6809
> > > version
> of
> > > B09 in the CMDS directory and ran a copy of the> JD procedure
with
> > > no
> > > FLOAT() functions. It ran without errors and no> Hitting DIVQ_X
> > > error
> in
> > > VCC.>>> On May 25, 2017 2:17 AM, "Bill Pierce via Coco" <
> > > coco at maltedmedia.com>> wrote:>>> I did a search through the
> > > nitros9 sources and only found 6 references to>> "divq". 2 were
in
> > > asm and
> disasm
> > > which were only references for the>> programs asm/disasm
> > > functionality
> > and
> > > no actual running code, 2 were in 2>> of Boisy's test routines
in
> > > one
> of
> > > his folders (not used for anything), and>> the other 2 were in
> > > basic09
> > and
> > > runb. So they are the only 2 nitros9>> modules that would rare
> > > their
> ugly
> > > heads on this.>>>> I do remember some years ago when Joseph was
> > developing
> > > VCC that there>> was some mention of something being missing in
> > > the
> 6309
> > > core. I've searched>> but couldn't find where I saw it (it was
> > > loooong ago). I've even mentioned>> it in the issues on the VCC
> > > repo issues
> page.
> > > We may have found what it was.>>>>>>>>>>>> Bill Pierce>>
"Charlie
> > > stole
> > the
> > > handle, and the train it won't stop going, no way to>> slow
down!"
> > > -
> Ian
> > > Anderson - Jethro Tull>>>> My Music from the Tandy/Radio Shack
> > > Color Computer 2 & 3>>
> > > https://sites.google.com/site/dabarnstudio/>>
> > > Co-Contributor, Co-Editor for CocoPedia>>
> http://www.cocopedia.com/wiki/
> > > index.php/Main_Page>>>> E-Mail:
ooogalapasooo at aol.com>>>>>>>>>>>>
> > > -----Original Message----->> From: Walter Zambotti <
> > zambotti at iinet.net.au>>>
> > > To: 'CoCoList for Color Computer Enthusiasts'
> > > >>
> > > Sent: Thu, May 25, 2017 3:31 am>> Subject: Re: [Coco] Basic09
6309
> > > version>>>> >This could explain the Hitting DIVQ_X error that
VCC
> > > version>>>> >keeps
> > > complaining>> about.This error could be isolated to either VCC
or
> > > BASIC09_6309.We can>> eliminate which one is the problem by
> > > running the
> > > BASIC09_6309 version on a>> real 6309 coco and not in VCC. If
the
> > > same problem persists then the>> problem in in BASIC09_6309. If
> > > it does not persist then the problem is in>> VCC.I don't have a
> > > 6309 in my CoCo so
> I
> > > can't volunteer to help.Any takers>> out
there?Walter-----Original
> > > Message-----From: Coco [mailto:>> coco-bounces at maltedmedia.com]
On
> > Behalf
> > > Of Wayne CampbellSent: Thursday,>> 25 May 2017 12:11 PMTo:
> > > CoCoList <
> > > coco at maltedmedia.com>Subject: Re:>> [Coco] Basic09 6309
> > > versionThis
> > could
> > > explain the Hitting DIVQ_X error that>> VCC keeps complaining
> > > about.On
> > May
> > > 24, 2017 8:52 PM, "William Astle" > lost at l-w.ca> wrote:My guess
> > > is
> the
> > > VCC isn't implementing DIVQ>> correctly, probably by not
providing
> > > the remainder unless regular integer>> division is also
> > > failing.--Coco
> > mailing
> > > listCoco at maltedmedia.comhttps://>> pairlist5.pair.net/mailman/
> > > listinfo/coco-- Coco mailing>> listCoco at maltedmedia.comhttps://
> > > pairlist5pair.net/mailman/listinfo/coco>>>> -->> Coco mailing
> > > list>> Coco at maltedmedia.com>> https://pairlist5.pair.net/
> mailman/listinfo/coco
> > >>>--
> > > Coco mailing listCoco at maltedmedia.comhttps://
> pairlist5.pair.net/mailman/
> > > listinfo/coco
> > >
> > > --
> > > Coco mailing list
> > > Coco at maltedmedia.com
> > > https://pairlist5.pair.net/mailman/listinfo/coco
> > >
> >
> >
> >
> > --
> > Wayne
> >
> > The Structure of I-Code
> > http://www.cocopedia.com/wiki/index.php/The_Structure_of_I-Code
> >
> > decode
> > http://cococoding.com/wayne/
> >
> > --
> > 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
--
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