Jump to content
IGNORED

The Compact Computer 40 (CC40)


Recommended Posts

On 3/1/2023 at 9:22 AM, brain said:

I'm not sure where I got this from, but I have the specs for the video display, it's attached, though I got it from some TI CC40 web/ftp site.  I can't find the location now.

 

That said, it's possible the actual Video Peripheral differs from the spec.  Thus, it'd be good to reverse engineer the protocol to see how it matches the spec.

 

The spec protocol looks "VT-ish", but I'm not a VT code expert, so I have no idea if the codes are similar/same

 

I didn't mean to imply char redefinition.  I just noted that the spec I received does not have all the char defs in it, but it might be in another doc, or maybe the ones that are in the spec imply they used the normal 99/4a char defs, etc.

 

Display Interface Functional Specification.txt 75.49 kB · 7 downloads

I noticed that the commands for "Graphics Mode" in that document are implemented in the HX-1000 Printer/Plotter.

 

The spec mentions 6x8 char defs, then, for 7 x 10 char defs, to follow the TI 911 video terminal.  The TMS9918 datebook shows what might have been the 99/4 capital letters.   (And our LARGE CAPITALS.) The 99/4A has a new variation plus small caps.  Of course CC-40 got nicer  lowercase. Point is TI had made several already. 

 

The 32 graphics characters (bars, box edges) match those available on the TI 911 terminal.  See DX10 Vol3 Applications Programming manual page B-1. 

Letters A-Z of the 911 keyboard give the graphic shapes shown here as 81 to 9A, you can see the others there too.

 

 The suggested color codes correspond to the TMS9918. 

 

 

Link to comment
Share on other sites

Sadly, a straight conversion is probably not effective.  Initial tests a few years back with an esp32 yielded poor results.  I wrote some new HEX support code that ran on the esp32, but required additional ICs to handle the low latency HSK handling needed by the protocol.

 

The transition from HSK(master) LO to HSK(peripheral) LO must be done in 8uS or less. TO be safe, 7uS is effective max.  AVR can handle that no problem, since it is single task, but esp32 running FreeRTOS was showing me 9uS or longer latency.  Removing FreeRTOS slid it down to 2-3uS, but then you lose all of the cool things like Wifi and such, since they require FreeRTOS.

 

That said, I think it depends somewhat on what types of output is desired. Little LCD panels are fine with the Arduino or esp32, and it looks like esp32 can do VGA, but if HDMI or something is needed, I'm not sure the esp32 is the best target.

 

It's probably best to move the discussion over the dedicated video thread:

 

 

Jim

 

  • Like 1
Link to comment
Share on other sites

Updated Ed Hallett cartridge port map:


============================================================================

    CC-40 CARTRIDGE PORT PINOUT: 
                                         TOP
      |---------------------------------------------------------------| 
   E  |  20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  |
   D  |                                                               |
   G  |  21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40  |
   E  |---------------------------------------------------------------|  
					     ____    __
    1 GND                                 21 CROM  [ CS ]

    2 +5 VOLT CONSTANT                    22 A6

    3 UNKNOWN  (LOW)  [ P25.2 ]           23 A5

    4 A9                                  24 A4

    5 A11                                 25 A2
              ______          __      
    6 DELAYED ALATCH + READ [ OE ]        26 A0
      _____
    7 RESET                               27 GND 
      ____
    8 INT3                                28 D2

    9 CLKOUT                              29 D1
        _
   10 R/W                                 30 D0
      ______
   11 ENABLE                              31 D6
      ___
   12 A14                                 32 D5

   13 ALATCH                              33 D4

   14 D3                                  34 D7
                                             ____    __
   15 A1                                  35 CRAM  [ CS ]

   16 A3                                  36 A10

   17 UNKNOWN (LOW)  [ P25.3 ]            37 A8

   18 A12                                 38 A15
                                                                __
   19 A7                                  39 UNKNOWN (PULSE)  [ WE ]

   20 +5 VOLT SWITCHED                    40 A13 

===========================================================================

    CC-40 CARTRIDGE PORT SIGNALS: 

    SIGNAL    DESCRIPTION  

    ALATCH    Logic 1 while port C (multiplexed address/data bus) asserts a
              memory address. 

    R/W       Logic 1 for read cycle, logic 0 for write cycle.
    ______
    ENABLE    Logic 0 for external (off processor) memory cycle.

    CLOCKOUT  Output clock for memory control timing. 

    A0 - A7   Addresses A0 thru A7 demultiplexed from D0/A0 thru D7/A7
              signals. 

    D0 - D7   Multiplexed data lines D0/A0 thru D7/A7.
    ____
    CRAM      Logic 0 for memory bank 5000-8FFF enable.
    ____
    CROM      Logic 0 for memory bank 9000-CFFF enable.
    ____
    INT3      Logic 0 to initiate a level 3 interrupt.
    _____
    RESET     Logic 0 to initiate a level 0 interrupt (RESET).

    DELAYED
    ALATCH+READ     Logic 0 for one time state immeadiately following the
		    ALATCH signal return to logic 0 when R/W(NOT) is logic 1.
		    (Most likely used for memory address timing control)

===========================================================================

Accessing it via assembly for the most part is just like normal RAM/ROM.  The P25.2 and P25.3 bits are in a register, but someone else will need to provide that.

  • Thanks 2
Link to comment
Share on other sites

So I'm thinking just poking an 8-bit value to $5000 (that's the start of the cartridge RAM per the EA manual) should place the value on the A0-A7 lines. Luckily I bought from you the cartridge port breakout card a while back, so this should be fairly simple to test out.

Link to comment
Share on other sites

Gave it a shot but no dice. It would have been too easy...

The cartridge data lines are all set to high when the CC40 is turned on, and pulse with each keypress, but trying to poke a value to the default >5000 address in cartridge space does nothing.

I suspect there is some register that needs to be set to activate that space, but so far I have not been able to figure it out as the EA manuals have very sketchy info on the cartridge port outside of how to bank switch the RAM or use the utilities to load programs from or save to that space. 

 

  • Sad 1
Link to comment
Share on other sites

It looks like there is an issue with the ALDS cart image on my multicart. When using the editor, typing AUTO gives me line number 00000 instead of 00001, and if I try to use that line number I invariably get an INVALID LINE NUMBER error. If I try to manually enter the line numbers starting at 00001, everything seems to work except that when I try to list, the first statement of the program is now assigned to line 00000 and pressing Enter will again give me an invalid line error. Essentially it seems that the Editor is stuck on line 00000.

Has anyone else experienced this? 

Link to comment
Share on other sites

Well it appears that the EA cart is actually buggy and essentially unusable. The editor issues can be bypassed by using a PC text editor and transferring the source file to the CC40 with the SD drive, but the linker is buggy as well, a fatal issue.

A real shame...

Link to comment
Share on other sites

One last coment on this: I examined the assembler tagged object file output with a hex editor, and after figuring out the structure of the tagged OBJ format, I did not see the >4E tag (end of record) at the end as it was replaced by a >4F tag (end of file). Adding an EOR tag (pretty sure not necessary when an EOF tag is present) did not do anything as the missing EOR error was still present. And listing the assembler output also verified that the generated code was correct as well. So this confirms that the issue is with the linker and not the assembler.

So unless there is a different version of the EA module floating around, that's the end of the road... @Ksarul @acadiel  are you aware of any?

Link to comment
Share on other sites

12 hours ago, Vorticon said:

One last coment on this: I examined the assembler tagged object file output with a hex editor, and after figuring out the structure of the tagged OBJ format, I did not see the >4E tag (end of record) at the end as it was replaced by a >4F tag (end of file). Adding an EOR tag (pretty sure not necessary when an EOF tag is present) did not do anything as the missing EOR error was still present. And listing the assembler output also verified that the generated code was correct as well. So this confirms that the issue is with the linker and not the assembler.

So unless there is a different version of the EA module floating around, that's the end of the road... @Ksarul @acadiel  are you aware of any?

The one that’s on the multi cart should be a direct dump of the 32K TI ALDS cart from Michael Becker.  HAP or others might have had some dumps as well; it might also be a bank switching issue with the multicart.  Have you tried it in MAME to see if it’s also happening there?

 

I’ll dig through my archives and do a diff and see what differences (if any) there are, and if so, what’s the difference?

 

Do you have some steps/code I can punch in on my side to try and replicate the issue?

 

Edit: First cursory look.  Got a brain refresher, it was a 64K bank switched cart.  32K was Memo Processor and 32K was ALDS.  I believe part of the uniqueness of Becker's cart was that it did a bank switch between the two 32K segments, but they should both live in >5000->CFFF depending on which one was selected.  I have done diff's of my carts so far with zero differences.  @Ksarul has my original EA Becker cart, and I don't know if he or something else has another E/A cart we can dump to compare to.

 

Did @pixelpedant try and assemble something on a recent video?  Did it work, Pixel?

 

Jon

  • Like 1
Link to comment
Share on other sites

22 minutes ago, acadiel said:

 

Did @pixelpedant try and assemble something on a recent video?  Did it work, Pixel?

I did not actually assemble code.  I can corroborate Vorticon's observation, however, that there's some weird and inconsistent (with documentation) behaviour on the part of the ALDS environment, in my case as well.  Namely, scrolling sequentially through lines of entered code in the line editor does not succeed as documented (but produces an "Invalid line number" error), and any line which is displayed using the E/EDIT or LIST command will display 00000 as its line number, regardless of line. 

 

The code is evidently being stored successfully (i.e., "E 3" or "E 00003" will correctly retrieve the third line as entered).  But lines will always be displayed as 00000 {some code} and as a result, editing with the E/EDIT command cannot occur unless the line number is manually corrected in any given case.

  • Like 2
Link to comment
Share on other sites

Looking at this page, and making these assumptions about the board design:

 

1) It's not MP that'd different; the executable is exactly the same as a production MP cart.

2) A15 is somehow toggling back/forth to move 32K segments between the two carts on the board.

3) Looking at pins 3-5 (1 being on the bottom), I see the "[P25.2 Unknown Low] to CC40 #3 connected.    Pin #1 on the CC-40 is GND, and it's connected.  Pin #2 on the CC-40 is N/C here (that's +5V standby.)  Pin #3 on the CC-40 is an unknown LOW (it's going to likely EPROM A15).  Pin #4 is EPROM A9, pin #5 is EPROM A11.  (These appear to go through VIAs to get to A9 and A11 (23-24) on the 27512.  Pins #6-11 aren't connected on the top.  Pin #12 A14 is going to A14 on the EPROM.  Pin #14 D3 is going to D3 on the EPROM.  Pin 15-16 and 18-20 are normal too.

 

So, if I had to guess, CC-40 pin #3 is what controls the "banking" pin for A15, and if the ALDS still has banking for A15 being checked by whatever the "P25.2 Unknown Low" pin #3 does, it *may* possibly cause issues?

 

I have Steve Reid looking into this.  His quote was "hard to believe there was a bug like that; I remember the testing that was done on the cartridge, it was done for months."  He's going to check his copy and or compile it from scratch to see if he can duplicate.

 

One thing we can definitely do is just create a uber 32k x however many banks version of this cart to where if it does a bank switch, it's got the same darn contents wherever it lives.  I don't know what happens if a write to that pin #3 happens on the multicart - we didn't test use cases for that.

 

@Ksarul would you mind desoldering and scanning both sides of the EA Mechatronics board?  Also maybe re-dumping the 27C512 again?  It would rule things out.  You can also enter edit mode, then Line mode, hit enter at “copy file” and then try AUTO and see if you start at 00000 or 00001.

 

Steven did come back - we will need to verify a legit cartridge if someone wants to lend me one to help @brain make mods to new prototype boards just for EA.  In other words I need to borrow an EA cart, folks 🙂

 

“So I had to go back in time and review the build history of the ALDS module. Looks like it is a two page module after all… handling paging internally. The console apparently supports this via two lines to the module. ALDS would assume to be on pages 00 and 01. If it’s not, it’ll probably behave very strangely.”

 

Imageimage.thumb.png.72c4db7d04d85c83622c7e004c65ed9f.png

 

 

  • Like 1
Link to comment
Share on other sites

4 hours ago, acadiel said:

Do you have some steps/code I can punch in on my side to try and replicate the issue?

Thanks for looking into this. I agree that it seems hard to believe that such a fatal bug would have sneaked by undetected.

 

I have attached the example program BEEP from the EA manual: SRC is the text source, LST is the assembly list file and OBJ is the tagged object file. Place the SRC and OBJ on the SD card of the drive and start ALDS with RUN "ALDS". Press L to enter the line editor, and at the COPY FILE prompt, enter 100.SRC. Sometimes this fails, and if it does, when you are at the prompt, enter COPY 100.SRC and it should load the source file fine. Once the > prompt is back, type LIST and line 00000 will be displayed along with the first program line of BEEP. Pressing ENTER or the up/down arrows will give an INVALID LINE NUMBER error. Entering LIST x will however display the xth line properly. You can edit any line with E x.

Type QUIT, answer Y, then press Q

 

Press A to assemble.  Source file is 100.SRC, object file is 100.OBJ. Press Y at the In Memory Assemble prompt, enter 100.LST at the List File prompt, then finally press Y at the Write Object File prompt.

 

To link, press L then press N for the Control File prompt. Enter I 100.OBJ at the Enter Line prompt. Enter E at the second Enter Line prompt. Enter 100.BEEP at the Linked Output File prompt and press ENTER at the List File prompt. The linking process will fail with a MISSING EOR TAG AT # 0.

 

If you just want to test the linker, you can follow the linking instruction above only using the supplied OBJ file.

LST OBJ SRC

  • Like 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...