• Please review our updated Terms and Rules here

Fun with TI-74s - A Poor Man’s HexBus / DockBus Analyzer

JGardner

Experienced Member
Joined
Jun 14, 2009
Messages
256
Something I should’ve written up long ago…

Well before low-cost Logic Analyzers were a thing, I had need of a way to capture TI-74 DockBus transactions.

I got a jump-start with the eye-opening documentation that came with my TI-95 calculator, and knew I needed

to study real-world DockBus operations. Then the PC-IF surfaced, & with it some of the CC40s missing Subs -

GETMEM, RELMEM, PEEK, POKE, & EXEC! Somewhat later (1992-ish) the internet was coming to a rolling boil,

& I found a guy in Fort Worth, TX who sold me a NIB 18K CC40, which had the “Missing Link” - DEBUG!

Which, with a _lot_ of help from the TMS7000 Family Data Manual allowed me to hand-assemble a small asm

routine on the CC40 that monitored & recorded DockBus activity between my TI-74 & PC-IF connected-to-PC;

Waay too much fun to be legal, 😎 & got me straightened out on the DockBus PDQ !

Oh, & if it makes you feel any better, IIRC I paid $15 for that CC40… 👻


So where’s the DockBus monitor pgm? Good question; I suspect 35 years is a lot to ask of recovered memory,

so I’m going to re-write it - Which may provoke memory, who knows… Its actually a simple task, & the only real

obstacle to Resurrection is that I currently lack a way to test the routine (no CC40, no PC-IF, no DOS 5 machine to

connect it to, at the moment…) When my #2 Pencil / Legal pad assembler spits out SNOOP.LST, I’ll be posting it.

Have fun…
 
No doubt - Would work fine too. I built a PC-IF/PC emulator with an AVR ATtiny85 dev board a dozen years ago;

was able to stuff the emulator + LOAD.PGM, RBUG, PEEK, POKE, EXEC, GETMEM, & RELMEM into the uCs

pgm memory (8K!), by implementing only the subset of the DockBus Protocol needed to download LOAD.PGM

& then the subs - With LOAD.PGM… Had some room left over too. The thing plugged into the 74s DockBus,

which also powered it - That’s when I started thinking about concatenating files… 😎

Jack
 
No doubt - Would work fine too. I built a PC-IF/PC emulator with an AVR ATtiny85 dev board a dozen years ago;

was able to stuff the emulator + LOAD.PGM, RBUG, PEEK, POKE, EXEC, GETMEM, & RELMEM into the uCs

pgm memory (8K!), by implementing only the subset of the DockBus Protocol needed to download LOAD.PGM

& then the subs - With LOAD.PGM… Had some room left over too. The thing plugged into the 74s DockBus,

which also powered it - That’s when I started thinking about concatenating files… 😎

Jack

Nevertheless the experience you related is an example of using the CC-40 then in a way many people today would never even have considered.

Modern PCs have very little general purpose I/O functionality, let alone anything that is readily exposed or simple enough for the average user to comprehend.

So a lot people go to microcontroller land, but then find themselves out of their depth leading to using more powerful sophisticated devices than necessary or whatever has the best libraries and documentation (i.e. somebody else already did most of the hard work).
 
Aye. I will admit to reluctance to deploy 32-bit solutions to 8-bit power budgets.
 
Pseudo-code outline of SNOOP.asm:

* Intended hardware is a TI-74 => PC-IF => PC, or, these days, reasonable facsimile thereof.
* A 2nd TI-74 is also required - This will be our “Snooper”.
* The Master 74 DockBus port is connected to a breadboard via 10-Conductor ribbon cable, with a
* 10-pin Female Header connector on the DockBus end, & a 10-pin Male header strip on the
* breadboard end.

* (Lest I forget, the headers are on .100” centers. Yep, that’s “Inches”…).

* Do likewise on the other side of the breadboard, this time plugginging the PC-IF DockBus
* connector into .100” Male headers plugged into the board, parallel with the 74 connection,
* but with an intervening break in the center of the breadboard, so that to actually connect
* 2 parallel pins on opposite sides of the breadboard you also have to jumper the intervening
* break.

* Do NOT jumper ANY intervening break yet.
* At this point, STOP. It’s vital to get this right, so if you’re not sure - ASK! If you’re sorta
* sure, ask anyway.

I’ll continue in a few - Sorry, I’m in Hospital. Nothing to worry about, but frequent interruptions…
 
Pseudo-code outline of SNOOP.asm:

* Intended hardware is a TI-74 => PC-IF => PC, or, these days, reasonable facsimile thereof.
* A 2nd TI-74 is also required - This will be our “Snooper”.

* The Master 74 DockBus port is connected to a breadboard via 10-Conductor ribbon cable, with a
* 10-pin Female Header connector on the DockBus end, & a 10-pin Male header strip on the
* breadboard end.

* (Lest I forget, the headers are on .100” centers. Yep, that’s “Inches”…).

* Do likewise on the other side of the breadboard, this time plugginging the PC-IF DockBus
* connector into .100” Male headers plugged into the board, parallel with the 74 connection,
* but with an intervening break in the center of the breadboard, so that to actually connect
* 2 parallel pins on opposite sides of the breadboard you have to jumper the intervening
* break.

* (continued)…

* On the Master ‘74 side of the breadboard, place a 10-pin Male header strip - With
* Pwr-In, Pwr-out, & BAV pins removed - In the breadboard, in parallel with the Master
* connector. Double-check that you’ve removed the right pins.

* Now jumper the connections needed along the center-break in the breadboard:
* MASTER PC-IF

* Ground => Ground
* RESET => RESET
* HSK => HSK
* d3 => d3
* d2 => d2
* d1 => d1
* d0 => d0
* Pwr-Out => Pwr-In

* Now check for Continuity, & lack thereof, as appropriate.
* One last time, check for Continuity between Pwr & Ground - There should’nt be any…

* Now you can plug in your Master 74. Check the PC-IF side of the breadboard for Pwr
* on the Pwr-In pin. Got that? OK, plug in your PC-IF. Run PCIF.EXE on your PC, then
* invoke [LIST “253.] on the Master to exit PCIF. Does it work? We jamming!

* Time to connect SNOOPER…
 
* Time to connect SNOOPER (continued) …

* Hmm. Easy, just plug it in. Preferably not backwards, which is possible, so please don’t;
* you’ll blow the protection diode in SNOOPERs Pwr_Out pin circuitry. Not Good…

* All we need now is the monitor pgm to capture DockBus traffic. 1st time around, I used a
* CC40, keyed in the Capture pgm with DEBUG, & then used DEBUG to read the buffer &
* the #2 Pencil/Graph Paper protocol for hard copy.
 
Update: The 1st module of SNOOP74 is awaiting Flight Test. Our Flight Test Engineer iscurrently under the weather, but expected to recover - Meanwhile, have a peek… As you can see this bit simply initializes a 1k buffer for the Bus capture - Trivial stuff…What’s really being tested here is the safety & efficacy of my #2 Pencil/Yellow legal pad Assembler. Experience suggests _Caution_ is warranted… All input appreciated.
aorg >4000



4000 BEGIN 88 5F FF 3B movd %>5FFF,R59 ; resets 1k buffer in 8K cartridge

4004 B5 clr A

4005 CLEAR 9B 3B sta *R59

4007 DB 3B decd R59

4009 7D FF 3B cmp %255,R59

400C E6 F7 jnz CLEAR

400E E2 4F cmp %79,R58



4010 E6 F3 jnz CLEAR



4012 F4 byte >F4 ; trap vector to RBUG command line
Sorry about the bizarre use of white space - Suffice to say, the text app is an Apple product…
 
Back on stage.......

This prog doesn't work correct and causes a break/error. Reason is that you use decd (decrement double register). It decrements both, R59 (LSB) and R58 (HSB) running trough loop 1 (inner loop) and R58 running out of range. R58 have to be decremented only in loop 2 (external loop). Comparevalue has then be set to dec 86 = hex 5F. Now it clears the area from 5FFF to 56FF (1 KB).
Last little thing: It does not clear the last byte (B5FF). If really needed, the easiest way to clear it, is to store 00 directly to this byte.
Code:
NO$IDT      TMS7000 Assembler PC 4.0               Sat Dec 06 00:37:05 2025
                                                                PAGE 0001
 
 4000                     aorg    >4000
                  
 4000 88 5F FF 3B BEGIN   movd %>5FFF,R59       
 4004 B5                  clr A                   
 4005 9B 3B       CLEAR   sta    *R59           
 4007 D2 3B               dec    R59               
 4009 7D FF 3B            cmp    %255,R59       
 400C E6 F7               jnz    CLEAR           
 400E D2 3A               dec    R58
 4010 7D 56 3A            cmp    %86,R58           
 4013 E6 F0               jnz    CLEAR           
 4015 F4                  byte >F4             
                  
 
Assembly complete 0 Errors 0 Warnings
 
Back
Top