Jump to content
IGNORED

TIPI - TI-99/4A to Raspberry PI interface development


Recommended Posts

I pruned out the power up routine. All but the toggle of the PI reset crubit, and the 'only if I'm >1100' vdp stack file buffer setup.

 

Still no luck... I then deleted the DSR list headers for all the DSK* devices. No difference...

 

Then, I zeroed out the header link to the powerup routine. And basically it works. In ROMPAGE on my Geneve.

 

I set the crubase to >1400 so it would be after >1100 cause all I have to boot off of is an old TIFDC ( Which does not work in ROMPAGE mode -- anger, confusion with or without disk emulation on )

 

anyway... now powerup and booting into MDOS is fine... I'm able to setup ROMPAGE, and load the EA cartridge, go into TI BASIC and CALL TIPI to get to TIPICFG and update the stuff using the PI. special files. Load programs from TIPI.... Browse around in DM2K... DIrectory listings of TIPI. DSK0. and DSK4. work...

 

My TELNET client works in 40 and 64 column mode.

Loading from URI3 worked...

 

Of course, the DSK1-3 emulation doesn't work because the TIFDC is present at a lower crubase. ( I'm tempted to add a switch so I can turn off the ROM on my floppy controller. --pull CS high to disable it-- )

 

Ah, but the Geneve BOOT doesn't look at DSK1 in crubase >1000, (quick to the bat cave) so with the power up routine disabled, I'm able to boot, and DSK1-3 emulation off of TIPI works in ROMPAGE. I just ran Old Dark Caves from CAVES folder on TIPI mapped as DSK1. :)

 

---

 

So, I need to understand what is wrong with this assembly code: https://github.com/jedimatt42/tipi/blob/master/hardware/dsr/powerup.a99

 

I tried removing the goofy shit for the sound list... and that didn't help. It is possible I fumbled that... But I do require that I can detect my crubase, toggle the PI reset line, and set the file buffers.

 

-M@

  • Like 1
Link to comment
Share on other sites

 

So, I need to understand what is wrong with this assembly code: https://github.com/jedimatt42/tipi/blob/master/hardware/dsr/powerup.a99

 

I tried removing the goofy shit for the sound list... and that didn't help. It is possible I fumbled that... But I do require that I can detect my crubase, toggle the PI reset line, and set the file buffers.

 

-M@

 

hmmm. TIPI is enabling interrupts before the powerup routine returns to the caller. Comment out the LIMI 2 and try again. If that fixes the problem, investigate why you had turned on interrupts to begin with. Was it for the sound list processing? If so, I would recommend removing the LIMI 2 from the powerup and testing to see if the sound list still fires. The powerup scan really shouldn't be interrupted; perhaps the TI ROM shuts off the 9901/9918 interrupts prior to this routine? I'm not in a position to research.

 

The Geneve boot EPROM does not contain an interrupt handler. I suspect the VDP interrupt is firing and never being serviced..

  • Like 1
Link to comment
Share on other sites

Thanks InsaneMultitasker! And thanks for your patience with me.

 

That did it... I left that in on the first attempt because I still had the code writing to the VDP for the buffers...

 

But then I debugged the 4A boot up code, and think I was unlucky when I decided if I could LIMI2 or not... :) It looks like it periodically enables the interrupt, and I must have caught it in that state.

 

Anyway, new code for DSR rom is pushed to master, and works on Geneve and 4A.

 

I have one more issue on the Geneve, and that is argument parsing in BASIC with my CALL TIPI subroutine. CALL TIPI works to bring up the default EA5 program which is TIPI.TIPICFG, but CALL TIPI("TIPI.NET.TELNET") also brings up TIPI.TIPICFG ... I admit my code for this is largely based on evidence under classic99, and not specification. :(

 

Since TIPI 99% works on Geneve now, I want to get that last bit worked out before shipping anything.

 

-M@

  • Like 3
Link to comment
Share on other sites

In basic.a99 you are moving a word from VDP to R9, to check for parameters. Change to a MOVB and see if that takes care of the issue.

 

; create a PAB

LI R0,VDPPAB ; destination: PAB in VDP

LI R1,PAB ; source: PAB template in ROM

LI R2,10 ; length: 10 bytes.

BLWP @VMBW ; copy LOAD pab template to VDP

AI R0,9 ; destination: length byte in VDP PAB

MOV R8,R1 ; source: string parameter to " TIPI" in CALL TIPI...

AI R1,5 ; check if '(' is present for parameters

.setvdpra R1

CLR R9

MOV @VDPRD,R9

CI R9,>B700 ; compare with string parameter tokens are present

JEQ copyname

; otherwise use default name

LI R1,TIPICFG

LI R2,13

BLWP @VMBW

JMP loadfiles

  • Like 1
Link to comment
Share on other sites

In basic.a99 you are moving a word from VDP to R9, to check for parameters. Change to a MOVB and see if that takes care of the issue.

 

; create a PAB

LI R0,VDPPAB ; destination: PAB in VDP

LI R1,PAB ; source: PAB template in ROM

LI R2,10 ; length: 10 bytes.

BLWP @VMBW ; copy LOAD pab template to VDP

AI R0,9 ; destination: length byte in VDP PAB

MOV R8,R1 ; source: string parameter to " TIPI" in CALL TIPI...

AI R1,5 ; check if '(' is present for parameters

.setvdpra R1

CLR R9

MOV @VDPRD,R9

CI R9,>B700 ; compare with string parameter tokens are present

JEQ copyname

; otherwise use default name

LI R1,TIPICFG

LI R2,13

BLWP @VMBW

JMP loadfiles

 

That did it! It is easy for me to understand that the second byte I copied is from an address with an undefined state in the hardware map... This is actually my first assembly language project since one week in the mid 80s.

 

I'm not sure how you spot that while multitasking insanely...

 

Thanks!

-M@

  • Like 2
Link to comment
Share on other sites

I guess all that is left, is to figure out what it will reasonably cost me to make these, and start making them.

 

Here is a final rendering from KiCad ( in real life, there will be a socket + eprom, and the PI connector will be a shrouded right angle type ( same as regular TIPI )

 

post-42954-0-80022500-1529782841_thumb.png

 

-M@

  • Like 4
Link to comment
Share on other sites

That did it! It is easy for me to understand that the second byte I copied is from an address with an undefined state in the hardware map... This is actually my first assembly language project since one week in the mid 80s.

 

Not sure whether this is important, but one should also keep in mind that the byte order is different between the TI console and other TI processors. The databus multiplexer of the TI console first accessed the odd byte (LSB), then the even byte (MSB), while the TMS9980A and the TMS9995 use a MSB-LSB order. This may have an effect for memory-mapped devices.

  • Like 2
Link to comment
Share on other sites

lol. These days who knows icon_wink.gif

 

Congratulations - yet another piece of hardware makes it through the gauntlet.

 

well HIS gauntlet.. mine (GENEVE with upgrade ram and hfdc) does not want to load mdos with the TIPI at 1000 cru.. It goes to the hard disk for a quick bit (I assume load/sys) and then hangs on the TIPI..

 

At a high cru it loads mdos fine..

 

Greg

Link to comment
Share on other sites

 

well HIS gauntlet.. mine (GENEVE with upgrade ram and hfdc) does not want to load mdos with the TIPI at 1000 cru.. It goes to the hard disk for a quick bit (I assume load/sys) and then hangs on the TIPI..

 

At a high cru it loads mdos fine..

 

Greg

Sounds about right for a setup with HFDC. LOAD/SYS likely is confused by a DSKx device that it does not expect. Sounds like you already found a solution.

Link to comment
Share on other sites

further testing on the geneve is necessary.. as it isn't communicating properly in mine i can see the values set by the pi but the geneve is unable to set values at the address of the tipi device.. so it boots up fine but when you access tipi it never gets the messages so lockup

Link to comment
Share on other sites

Greg's Geneve in rompage is not able to write to the shift registers in my CPLD mapped to address 5FFD and 5FFF. It is able to read the two at 5FF9 and 5FFB. These are each single byte items.

 

Maybe a problem in my CPLD code for decoding a write operation. Don't know why it works on mine and not Greg's.

 

-M@

Link to comment
Share on other sites

Tim and I tried to find out the meaning of CRU bit 23

INTXT  EQU  1            ENABLE EXTERNAL INT TO 9901=1, NOT ENABLE=0
INTVDP EQU  2            ENABLE VDP INT TO 9901=1, NOT ENABLE=0
INTKB  EQU  8            ENABLE KEY BOARD INT TO 9901=1, NOT ENABLE=0
CPEBRS EQU  16           PE BOX RESET 1=ACTIVE, 0=INACTIVE
C9938  EQU  17           RESET TO AVDP CHIP
KBREST EQU  22           BIT TO RESET EXTERNAL KEYBOARD IF AVAILABLE
XMEMCY EQU  23           EXTERNAL MEM CYCLES 0=LONG, 1=SHORT
VDPWAT EQU  25           VDP WAIT CYCLES 1=ADD 15 CYCLES, 0=ADD NONE

The problem is that I could not find any difference in run time with bit 23 set or unset on my Geneve. The boot EPROM sets the bit to 1 and never touches it again. My test program on the attached image delivers the same values for test #3 and test #4, where test 4 plays with the bit.

 

If you have a Genmod and a way to transfer this program to your computer, it would be interesting to learn whether it has an effect for Genmod. I seem to remember that all PBox accesses for the stock Geneve are 1-ws; the Genmod is designed to have 0-ws. So maybe the stock Geneve overrides the setting of the bit, where Genmod does not.

genbench.dsk

  • Like 1
Link to comment
Share on other sites

Greg's Geneve in rompage is not able to write to the shift registers in my CPLD mapped to address 5FFD and 5FFF. It is able to read the two at 5FF9 and 5FFB. These are each single byte items.

 

Maybe a problem in my CPLD code for decoding a write operation. Don't know why it works on mine and not Greg's.

 

-M@

 

I wonder if Michaels post #559 holds the key. Could writes to the odd versus even byte (address) be gumming up the works. Hopefully this is a simple problem to resolve.

Link to comment
Share on other sites

 

I wonder if Michaels post #559 holds the key. Could writes to the odd versus even byte (address) be gumming up the works. Hopefully this is a simple problem to resolve.

 

Maybe... I only map latch bytes into the LSB of a word.. I would think the 9995 more normal in this regard. The 4A is difficult, in that the ME and WE don't change between bytes, and just the low address line does.

 

To work around that, I consume the PH3 clock signal and use that to trigger sampling the address and choosing what latch is set to the data bus. I haven't looked at what timing diagrams might be out there for that. And I don't remember why I thought this was a good idea... I'd have to go back and look at the 4A timing diagrams.

 

On my Genmod, I've tried with both positions of the waitstate switch... both work - I'll double test this weekend. So maybe there is a small change I can make to triggering in the verilog code... this will require experimentation on a failing Geneve.

 

What else don't we know about Genmod?

 

-M@

Link to comment
Share on other sites

Tim and I tried to find out the meaning of CRU bit 23

INTXT  EQU  1            ENABLE EXTERNAL INT TO 9901=1, NOT ENABLE=0
INTVDP EQU  2            ENABLE VDP INT TO 9901=1, NOT ENABLE=0
INTKB  EQU  8            ENABLE KEY BOARD INT TO 9901=1, NOT ENABLE=0
CPEBRS EQU  16           PE BOX RESET 1=ACTIVE, 0=INACTIVE
C9938  EQU  17           RESET TO AVDP CHIP
KBREST EQU  22           BIT TO RESET EXTERNAL KEYBOARD IF AVAILABLE
XMEMCY EQU  23           EXTERNAL MEM CYCLES 0=LONG, 1=SHORT
VDPWAT EQU  25           VDP WAIT CYCLES 1=ADD 15 CYCLES, 0=ADD NONE
The problem is that I could not find any difference in run time with bit 23 set or unset on my Geneve. The boot EPROM sets the bit to 1 and never touches it again. My test program on the attached image delivers the same values for test #3 and test #4, where test 4 plays with the bit.

 

If you have a Genmod and a way to transfer this program to your computer, it would be interesting to learn whether it has an effect for Genmod. I seem to remember that all PBox accesses for the stock Geneve are 1-ws; the Genmod is designed to have 0-ws. So maybe the stock Geneve overrides the setting of the bit, where Genmod does not.

 

I cannot reliably boot my Geneve without the TIMODE switch on. This may skew the numbers... unless you are testing access explicitly to the 'fast' memory.

 

The results of running 'speed5' in 'turbo' (0-waitstate) mode are:

 

Result for test 01: 175

Result for test 02: 306

Result for test 03: 328

Result for test 04: 328

With 'turbo' switched off:

 

Result for test 01: 174

Result for test 02: 305

Result for test 03: 328

Result for test 04: 328

With 'turbo' still off, and I run it again... then I get the same numbers as the first run... 175, 306, 328, 328

 

rebooting with software command 'timode' removed from AUTOEXEC produces still the same numbers. I was also able today to boot with the TIMODE switch off... and got also the same numbers.

 

With repeated runs in any mode, the results vary between the first two sets.

 

-M@

  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...

Ok, I believe the PEB boards are final enough.

 

I received 20 pcbs. Wednesday. Built 2 for myself. And all seems well.

 

I was able to eliminate the system clock signal from my verilog. That was a hack I was happy to see gone.

 

I'm not doing pre-orders. I will order components to populate the boards Tomorrow, and then as I get inventory built I will let Arcadeshopper put them in-stock. Same for further side port boards.

 

You might experience some sticker shock, but these are much slower to build and have 3 times the surface area to debug. They eat up my hobby time something horrible. And I still haven't figured out packaging material costs.

 

Also, like prior cards before me, DSK mapping doesn't work if you have crubase conflicts. That's just the way the TI is. For best results, evict anything using CRUBASE >1000, and let the TIPI have that.

 

-M@

  • Like 1
Link to comment
Share on other sites

Also, like prior cards before me, DSK mapping doesn't work if you have crubase conflicts. That's just the way the TI is. For best results, evict anything using CRUBASE >1000, and let the TIPI have that.

 

-M@

 

Is there a reference for what cards are set to what CRUBASE?

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...