Search the Community

Showing results for tags 'tc'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Frontpage, Forum Information and General LEGO Discussion
    • Guest Section - PLEASE READ BEFORE YOU REGISTER!
    • New Member Section - PLEASE READ BEFORE STARTING!
    • Frontpage News
    • Forum Information and Help
    • General LEGO Discussion
  • Themes
    • LEGO Licensed
    • LEGO Star Wars
    • LEGO Historic Themes
    • LEGO Action and Adventure Themes
    • LEGO Pirates
    • LEGO Sci-Fi
    • LEGO Town
    • LEGO Train Tech
    • LEGO Technic, Mindstorms, Model Team and Scale Modeling
    • LEGO Action Figures
    • Special LEGO Themes
  • Special Interests
    • The Military Section
    • Minifig Customisation Workshop
    • Digital LEGO: Tools, Techniques, and Projects
    • Brick Flicks & Comics
    • LEGO Mafia and Role-Play Games
    • LEGO Media and Gaming
  • Eurobricks Community
    • Hello! My name is...
    • LEGO Events and User Groups
    • Buy, Sell, Trade and Finds
    • Community
    • Culture & Multimedia

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


What is favorite LEGO theme? (we need this info to prevent spam)


Which LEGO set did you recently purchase or build?


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests


Country


Special Tags 1


Special Tags 2


Special Tags 3


Special Tags 4


Special Tags 5


Special Tags 6


Country flag

Found 5 results

  1. Dear All, motivated by Evan’s 9750 EuroBricks hacking challenge, I tried to get my beloved Amstrad PCW 8512 (named by Amstrad's CEO Alan Sugar “Joyce”, which is the given name of his assistant) along with an SCA Systems parallel/serial interface in touch with the LEGO Interface A (#9750). It appears as if TLG never wondered into Amstrad world; they were more on the professional IBM, Apple, Acorn, Commodore, and Philips side of things. Expensive things that is; not on the el cheapo side, were I was. Here is the video proof that it works ;) I did not upload that video to YT - it is too crappy https://bricksafe.com/files/Toastie/amstrad-8512-and-9750/Amstrad 8512 LEGO 9750.mp4 To begin with: Here is my vintage compuing corner in the attic (this room also serves as my home-office) - along with the vintage LEGO stuff, which is controlled by these machines: (1) is the PBrick section (RCX, Scout, IR serial and USB tower, Sybotics with optical serial connection; the Vision Command camera setup is controlled by the Scout; Cybermaster with the RF tower below. The barely visible TC brick sorter robot is controlled by the RCX. (2) is the LEGO interface A (#9750) section; there is a 4-way switch that allows to use multiple computers for the interface: The IBM XT (A), the Toshiba Satellite 4090 (B), which is on a pull-out shelf, or any modern computer via an Arduino USB28bit parallel interface mounted right to the interface A. The 4.5V motors of the TC robot (3) below are hooked up to the Interface A; additionally, a PUp tacho motor and a Technic hub control the lateral movement - synching and programming reported here on EB. (4) is a second Interface A - this again is on a 4-way switch (located above the (D)) to be controlled either by the Amstrad PCW 8512 (C) or the ZX81 or ZX Spectrum (D) or the Atari 1040 ST or the C64 (E). The second Interface A is intended for testing and trying out things; there are 8x 4.5V lamps and 2x 4.5 motors with 2x light sensors on a 32x32 base plate. Both, the interface as well as the Atari and C64 are on pull-out shelves. So without further ado: Here we go again ... and yes, my posts in this regard may be annoying, but so are super cars. Or Cada stuff, 2++ m tall cranes, ++$600 sets – >only< to me, that is! And here is to feeling good! The Joyce [(C) in the above photograph] is one of a kind, I can tell … its design is beyond belief – in the absolutely positive sense. Made for the masses, using incredible techniques. IBM just went ballistic with regard to parts and pieces in their original PCs and then XTs (which I am madly in love with). 8000 something German Mark in 1983. And TLG was sailing along – after three more years they introduced Technic Control, and PC’s, XT’s, Apples, and so on were the prime machines targeted for that technology – in schools that is … no way to go cheap there! Now, the PCW (Personal Computer Word-processor) 8512 was not as cheap as Sinclair’s ZX computers; it cost about one quarter of what IBM charged for their PC. But: It was a fully blown word and database processing system. No built-in graphical stuff, just pure text and number crunching. The OS was CP/M 3.0 (“CP/M Plus”) – which was “the basis” of (or better copied by) Microsoft’s early versions of MSDOS. CP/M is so cool … and of course programming languages also work on the Joyce; as I wrote many times, I am a total BASIC person. Joyce came bundled with the “LocoScript” word processor and with “Mallard BASIC” for CP/M Plus, both made by Locomotive Software in the early 1980’s. The following citation is what I really like about the name of that BASIC dialect (copied from the referenced Wikipedia article): “It was also optimised for speed — it is named after the LNER Class A4 4468 Mallard locomotive, the fastest steam locomotive in the world, once again displaying the company's fondness for railway-oriented nomenclature. In fact, the Locomotive Software name came from the phrase "to run like a train" and it was this theme that was used to name Mallard BASIC — no other Locomotive Software product was named after anything railway-oriented.” And behold, Mallard BASIC is fast! Joyce came also bundled with a 9-needle dot-matrix printer, which mechanically attached seamlessly to the keyboard mimicking a type writer; there are recesses for 2 brackets in both devices. I believe though, virtually >no one< actually used that feature, as it consumes considerable space in front of the screen. Joyce’s brain is a Z80A CPU – my all-time favorite microprocessor. Why? Because back in the 1980’s, I must have referenced the German edition of Rodnay Zack’s book “Programming the Z80” a thousand times as I was fascinated by the performance boost when programming in Z80 assembly code, as compared to e.g. BASIC. All my computers I had back then (and still have today) had Z80 CPUs: Sinclair’s ZX81 and ZX Spectrum, and Amstrad’s PCW 8512 “Joyce”. On the Joyce, almost all Z80 CPU signals are exposed on the back connector along with some other lines. But there is more (there always is): Joyce features a printer port, which is (exclusively) connecting with the Amstrad/Joyce 9-needle dot matrix printer. One can of course connect custom devices to that port, but that needs intimate knowledge of the innards of the hardware. Which is not that straight forward, as Joyce features some rather powerful chips, among them an 80 pin flat pack gate array which does a lot of housekeeping tasks, the well-known NEC µPD765AC-2 floppy disc controller, and even a second microcontroller, the NEC µPD8041AH, which is a programmable peripheral interface controller. The latter features an 8bit CPU, 1kbyte ROM, 64 byte RAM, 8bit timer/counter, and 18 I/O lines, which all go to the 9-needle dot matrix printer! Nothing really easy to hack for the interfacing of Joyce with LEGO interface A, particularly with access from BASIC. Mallard BASIC does provide the command “OUT address, data byte” and the “INP(address)” function for direct Z80 I/O port access, but I would not know how to dig through the PPI controller to read and write to #9750 through the built-in printer port. Fortunately, I got hold of the SCA Systems serial/parallel extension interface for the Joyce. There are at least four such interfaces from different vendors I am aware of. Two of these are the Amstrad CPS 8256 and the SCA Systems interface. At first glance, both their PCBs look identical, but closer inspection revealed that there are differences, particularly in the address decoding section. The circuit diagram and photographs for the CPS 8256 are available on the internet, similar stuff for the SCA interface is not, as far as I know. So I had to do some PCB track tracing, at least for the address decoding. After a lot of beeping through the tracks, I came up with the partial circuit diagram below. I was very happy to learn that the TTL 74LS373 chip (8 transparent D-flip flop latches, as TLG used in their #9771 ISA card for IBM PCs) directly connected to the 8 data out lines of the Centronics port of the SCA interface! From there it went straight downhill. Above: Circuit diagram of the address decoding section and the 8-bit 74LS373 output latch interfacing to #9750. The blue box contains my additions, i.e., a second 74LS373 and a 4x NOR gate 74LS02 TTL chip. Address decoding and data read/write procedure I wanted this interface to act in exactly the same way as TLGs #9771 card behaves: Upon emitting 1) the correct address, 2) the 6 data bits for the 6 output channels of the interface A, 3) IORQ# (# = active low), and finally 4) WR#, the C line of the “output 74LS373” goes H and thus it mirrors the content on the 6 D lines connected directly to the Z80 data bus transparently to the corresponding 6 Q outputs. As there is no change on the data bus as long as WR# = L, all emitted data are securely latched, when WR# goes H again (i.e., the C input of 74LS373 goes L). No more changes of the output lines are possible until the next complete write cycle. OC# is connected to GND and thus the chip has always activated outputs, see below. Well, this is how it is done on the #9771 card. But to my surprise, I did not find any WR# line connecting to the address decoder, I found only address lines and IORQ#. At first, I was puzzled but then realized: The 74LS373 in the SCA interface is for writing only. No data are read from the 8 Centronics data lines; the two Centronics flow control lines BUSY and STROBE# are routed to the Z80DART in the SCA interface. In other words, no WR# decoding is necessary in this scenario. SCA used the 3-to-8 demultiplexer 74LS138 for Centronics port address decoding in the following manner: The output Q7# of 74LS138 goes L (= is selected) when its data input lines A(=A3), B(=A5), and C(=A6) are all H, the enable line FE1(=A7) = H, and the enable lines FE2A#(=IORQ) and FE2B#(=A4) = L. In all other cases Q7# = H. This signal needs to be inverted, and SCA used the second 2-to-4 demultiplexer in the 74LS139 TTL chip to do just that: When Q7#(74LS373) = L, Q2#(74LS139) = H. The decoded Centronics port write address is thus: A7 A6 A5 A4 A3 A2 A1 A0 H H H L H X X X ; = 0xE8 to 0xEF, as A0 – A2 are not decoded The Q2# line of 74LS139 used as simple inverter is routed to the C input of the 74LS373 8-bit latch: When the address is within 0xE8 to 0xEF, the data bus content is latched upon IORQ# = L. However: This approach does work with a Centronics printer but not for bidirectional operation of LEGO interface A: Using TLG’s TC Logo and other programming languages, you can write to the 6 outputs and read back the status of the outputs as well as the status of the two sensor inputs of #9750 at the same address. So this calls for a (very) little tinkering with the SCA circuit board and the addition of a second 74LS373 (read latch) and a 4x NOR gate 74LS02 TTL chip, see circuit diagram above. In addition, pin 6 of 74LS139 in the SCA interface needs to be bent up – there is no use for this inverter after pimping the board. Next the WR# and RD# lines (connectors 39 and 41 on the Joyce expansion port) are wired to the inputs of two NOR gates; Q7# is wired to both other inputs: When WR# and Q7# = L, the NOR gate for reading = H; when RD# and Q7# = L, the NOR gate for writing = H. The latter means that this signal can be directly connected to the C input of the 74LS373 latch for storing write data. For reading back all 8 bits with the additional 74LS373, the corresponding NOR gate output signal needs to be inverted: This signal goes to both, the C input as well as the OC# chip enable input. When OC# = L; the chip is enabled; when it is H, the outputs are in “tristate”, i.e. not visible on the data bus. All inputs remain active though. When C and OC# = H (wrong address, IORQ# is not = L, RD# is not = L) the outputs of the second 74LS373 are in tristate but the D-inputs follow (transparently) the data bus content. When C and OC# = L, data on the D inputs are immediately latched (no more changes recognized) and the outputs are activated, mirroring the D lines content very shortly before C became L for the time of the RD# signal = L (i.e., the Z80 CPU fetches the data bus content). The moment RD# goes back to H (= data are in the corresponding register of the Z80 CPU), the second 74LS373 goes again into tristate. This is in principle how it is done on the IBM XT #9771 ISA card as well. I also used a similar approach for my ZX81 and ZX Spectrum interface for #9750. It is a bit different on my Atari 1040 ST, as the printer port is handled differently on these machines. Here are some pictures of hacking the SCA Systems interface for operating LEGO Interface A with an Amstrad PCW 8512: Left: I had to cut into the SCA interface enclosure to access the built-in 74LS373 - this "channels" all 8 data bus lines as well as +5V and GND to the outside. Also the 6 Q outputs going to #9750 are available. Right: I simply soldered two 1x10 Dupont type connectors to the solder pads of the 74LS373. The wires seen are RD# and WR# from the control bus, Q7# and the new line replacing the Q2# line going to the C input of 74LS373. Left: The TTL chip on the lower right is the 74LS373 output latch I am tapping into (or better onto ;) Right: The add-on board attached to the RCA interface; the front connectors are compatible with the orginal LEGO 20 ribbon wire for the Interface A. As always: Tried to match an enclosure - the golden 1x6 tile is from the stand of my MK Flying Dutchman. 3 windshields make the side walls. Left port: Centronics - still works. Right port: RS232 - still works. Top port: LEGO Interface A - works. And finally, we can add another computer system from the 1980’s, which was not endorsed by TLG, to @evank #9750 challenge list. The chippies used are all from way before 1990. I feel good . All the best, Thorsten
  2. I am very happy and proud to share this with you guys. I've been working on it for past two months, slowly tweaking and adjusting the model in my free time, as well as the fun of day dreaming and brainstorming a story and characters for the world of the Brick Seas. And I must not forget reading all the lore on lunch breaks after discovering these forums, what a joy. This build is inspired by a MOC I built as a child from my Volcano Island set. It was fun remembering playing as a kid while putting this together, and I found myself playing a little as an adult too, which I hadn't done in nearly 30 years haha. It was quite fun and has changed my outlook on 'adult lego' building since getting back into it roughly 5 years ago and I think I will be building to play for now on instead of building to display! I don't have a wealth of parts to draw from and build with; but parts I used were two Scary Pirate Island GWP sets, the Pirate Playground GWP set, a Pirate VIP pack, I took apart and cannibalized my Star Wars Landspeeder I had gotten a few years ago, and I used up almost all my extra pieces I had stored away in Tupperware. All in all, I'm super happy I managed to pull it off with the parts I had, and the almost non-existence of my leftover pieces afterwards. I also fit in a light brick I took out of a previous MOC I built a year ago, though I kept that MOC in tact and did not use any other parts from it. _____________ Welcome to Sharktooth Tower, home of Ironhook The Third. Said to be the great grandson to the legendary Pirate Lord Ironhook, but no one knows for sure and you better not ask ask him about it. They say his father took up the Jolly Roger flag as Ironhook Jr to reclaim his "heritage" and can still be found plundering the seas in Halos to this day. But Ironhook the Third prefers his piracy from afar, letting the loot come to him. With his base of operations acting as a storehouse and bank for ill-gotten goods, he has amassed a fortune of information as well as wealth of gold, a self proclaimed Spy King of the Sea. Though none who know would speak the location, they say the dread den of dogfish stews in a perpetual fog that never lifts. Tooth like rocks and a shroud of heavy mist keep it protected just as much as the fabled canon The Thresher, that sits atop the tower. This terrible Tower juts out of and above a cave in the fearsome Visage of a hungry shark, seemingly swimming in the never lifting haze. Torch lit eyes, it's open maw of toothy rocks hungry for any unfortunate souls that dare raid this stronghold. No Oleander or Corlander have ever set eyes on this frightful fortress and lived. The secret location of Sharktooth Tower is known by few. All who know it, first meet Flotsam Frank. A slippery seal, Flotsam Frank is Ironhook's main go-between and scout, making first contact and brokering with fellow scallywags, before loot is stored away in the deep belly of the Shark's cave. Ironhook is sly, but he is only as good as the men he surrounds himself with. And it's a good thing he's fostered an indomitable crew. Flotsam Frank is all too reliable, but most frequently floating along the stud strone seas. When Ironhook needs a job done, he relies on his right hand man, Mickie Two-Hands. Mickie is quite proud all his appendages and face print are in fact, but he gets his name because he does the work of two men. Quite the opposite of Mickie, the last crewman of Ironhook's small band is Nathaniel Napsalot. With incredible luck and a 'too optimistic' attitude that won't quit, Nathaniel Napsalot is a Privateer who's hard to hate, but still pushes the limit. A bad habit of sleeping on the job always lands him ire of of his cave camping compatriots. But you've never seen a fisherman as fierce as he, nor a friend so Jolly. A stalwart but sleepy guard, his spectacular luck seemingly always flipping his frequent naps into fortune's favor. I've heard rumor that Flotsam Frank has recently made brush pass with several shadow contacts of the Continental Council, and it's no secret Ironhook weeps for no spilt Oleander's blood. But the Thresher canon always bellows smoke on sight of the Corlander flag, and an Eslandolan alliance with such scoundrels could threaten relations. One has to wonder why Eslandola would want an alliance with such a fiend that fancies himself Spy Kings of the Brick Seas. _____________________ I hope you enjoyed my MOC of Sharktooth Tower and the fun characters that inhabit it. They are very happy to meet you I used the glow of an electric fireplace to simulate the perpetual fog, though only in some photos as it hinders view of the MOC itself. For that same reason of atmosphere, I did not use the light brick in my cave for all photos, as it is quite bright. I had many issues uploading photos to this site and it would not let me insert the URLs as inserted media, but I posted the links to each photo. I am also unclear if this entry would be factored into Category A or Category B. I intended it for Category B, as I came up with a story for my characters and their interactions in the world. But I see lots of people entered Category A and also wrote stories to go along with a scene, so I am unsure. Please place it where it belongs. I saw on the entry page we can enter both and have the category A included in our category B if we had multiples, but I only have this one build I made and am unclear if it would count for both A and B. I tried to tie in to the lore the Brick Seas, but also a tie to Ironhook who was the Pirate that ruled the seas of my childhood imagination. He was the dread of both Imperials and Islanders alike in my 8 year old mitts. Thank you for looking at my build and meeting my crew.
  3. Dear All, motivated by Evan’s 9750 EuroBricks hacking challenge, I tried to get my beloved ZX81 (Zeddy) in touch with the LEGO Interface A (#9750). It appears as if TLG never wondered into Sinclair world; they were more on the professional IBM, Apple, Acorn, Commodore, and Philips side of things. Expensive things that is, not on the el cheapo side, where I was. My Zeddy is an ISSUE ONE (as it is printed on the PCB, I am not exaggerating here!) machine from 1981 … Does the text above sounds familiar? Yes, I just c/p’d from my ZX Spectrum thread posted earlier. And yes, my posts in this regard may be annoying, but so are super cars. Or Cada stuff, 2++ m tall cranes, ++$600 sets – >only< to me, that is! And here is to feeling good! The Zeddy is one of a kind, I can tell … its design is beyond belief – in the absolutely positive sense. Made for the masses, using incredible techniques. IBM just went ballistic with regard to parts and pieces in their original PCs and then XTs (which I am madly in love with). 8000 something German Mark in 1983. And TLG was sailing along – after three more years they introduced Technic Control, and PC’s, XT’s, Apples, and so on were the prime machines targeted for that technology – in schools that is … no way to go cheap there! There was a nice ad in the back-then magazines (this one from the 1983 April issue of Sinclair Projects: So, here we go again: The Sinclair “interface” for LEGO Interface A is exactly the same as described earlier on EB for the ZX Spectrum, so there is nothing to add. The edge connector layouts of the Speccy and Zeddy are “identical” (for the Zeddy’s contact range); thus the interface for #9750 I built into the ZX Printer case along with the printer’s edge connector plug/cable are fully compatible. All that is needed is (again) CE#, RD#, and WR#; CE# is enabling reading/writing from/to the interface and includes resolving address and memory request (MREQ#). Why not I/O request (IORQ#) as for the Spectrum? Simply because standard ZX81 BASIC does not feature the OUT/IN command/function. Machine code works well using the Z80 out/in directives as well on the ZX81 of course, but I like to keep it simple; BASIC command POKE and function PEEK are my best friends. Both issue MREQ# rather than IORQ# for getting access to the data bus. The really crazy part is the address decoding, which should be compatible with the 1kByte ZX81 base unit as well as with a Zeddy having a 16k Sinclair RAM pack attached; who knows what I will program into these sheer endless rows of empty bytes … Here’s what we are dealing with: The 8kByte ROM of the ZX81 has 13 address lines A0 to A12 (0x0000 to 0x1FFF) – so Sinclair only attaches these with no further decoding of A13, A14, and A15. In other words, the ROM also responds to addresses from 0x2000 to 0x3FFF, and so on (these additional “regions” are sometimes called “shadows”). However, for one, there is the clever Ferranti ULA, which is connected directly to the Z80 CPU using all 16 address lines, and always knows what’s going on in the system. And the ULA can control the ROM and RAM access via its RAMCS# and ROMCS# outputs. It does clean up the address mess a bit but certainly not everything, as it has other, way more important things to do. If you want to dig any further, I recommend starting here: https://www.zx81keyboardadventure.com/2023/02/zxio-interface-for-zx81-part-2.html As my Zeddy does have a 16kByte RAM pack attached, which is located at 0x4000 to 0x7FFF, followed by ROM shadows 3 and 4, which are followed by 16k RAM shadow 1, all 64k addresses are in use. Furthermore, the 16kByte RAM pack does not have a RAMCS# input. I did not want to open it (again that is, needed to do it a couple of years ago to replace two 4116 memory chips); I was thus left with cleaning out ROM shadows and use corresponding addresses to read from/write to the ZX Printer interface which in turn talks to #9750. This approach has been frequently used back in the days as well of course; see for example this article also referenced in the above zx81keyboardadventure blog thread on page-1. And without further ado, here is my approach to a) free up addresses 0x2000 to 0x3FFF (the first ROM shadow) and establish 8 (memory mapped) I/O ports for – well – controlling 8 #9750 interfaces: As I am going cheap here, in the tradition of Sinclair Research Ltd., I am using only 2 TTL chips from the 1980’s (this an essential is part of @evank 's challenge!), to get 8 I/O ports (and not only one, as described in the ETI article referenced above) at the addresses 0x2000 to 0x2007, when address lines A0, A1, A2 are actually connected to the 3 channel select inputs of the 74LS138 de-multiplexer. OK, in principle only; currently I have hard-wired only one I/O port at 0x2000 (8192 dec), as all three channel select inputs of 74LS138 are connected to ground (L), which always resolves to output Y0#. Only when this chip is enabled though, otherwise Y0# is H. Taking advantage of the 3 enable inputs (FE1 needs to be H AND FE2A# needs to be L AND FE2B# needs to be L) allows appropriate address decoding when the de-multiplexed A, B, C input information (3 bits = 8 combinations = 8 I/O ports) is used to select an Y# output port. In the above configuration, A15 AND A14 AND MREQ# need to be L AND A13 needs to be H (= CPU memory access to address 0x2000), and as A-C are L = 0, Y0# then goes L. This is exactly the same approach I used for the ZX Spectrum – in other words, I can use the exact same interface described before built into the ZX Printer case. This is also in the tradition of Sinclair Research, of course; the ZX Printer works on both the ZX81 and the ZX Spectrum. Now the ROM shadow needs to get kicked out; this is done by inverting Y0#, and use one additional npn transistor as “tristate” driver: When Y0# = L, the output of IC2c is H and the transistor pulls the ROMCS# line high (ROM = not responding), when Y0# = H, the output of IC2c is L and the transistor is in “high impedance” state and the ULA can do whatever it wishes to do on the ROMCS# line. The only thing left is to route the Y0# (CE#), RD#, and WR# lines to the interface as well, as was also done for the Spectrum. And now we can add the good’ol Zeddy (Grrrrrr …) to the list of 8 bit machines operating the LEGO Interface A. At >very< low cost: Left: The Zeddy - a full-blown 8bit computer! The tape is for insulation. Soldered extra wires are for connecting to the "interface" shown on the right. This is the circuit enclosed in blue in the above schematic. Left: "Interface" mounted to the PCB. Right: Focus on the 16kByte RAM pack (me and photography, this was on purpose, of course) and the ZX Printer interface connecting to #9750. The Sinclair workspace - here, the Zeddy illuminates the 4.5V light bricks: POKE 8192,63 does it ... This is the program playing the lights as shown in this video: https://bricksafe.com/files/Toastie/zx81/ZX81 8750.mp4 All the best, Thorsten
  4. Dear All, motivated by Evan's Eurobricks 9750 hacking challenge, I tried to get my beloved ZX Spectrum (Speccy) in touch with the LEGO Interface A (#9750). It appears as if TLG never wondered into Sinclair world; they were more on the professional IBM, Apple, Acorn, Commodore, and Philips side of things. Expensive things that is; not on the el cheapo side, were I was. My Spectrum is an Issue.3 machine from 1983 –Sinclair introduced the legendary ZX Spectrum in 1982 – as successor of their legendary ZX81 from 1981, which was the successor of their legendary ZX80 from, guess when, yeah 1980. And yes, I do like the Sinclair machines very much, as they taught me (a low income chemistry student) how computers work on the hardware level, at the lowest price tag possible (so I could afford these machines) and they taught me how machine language and assembly works. A very nice coincidence regarding LEGO Technic Control and computer hardware for the masses in the 1980’s is shown in the photograph below: The background is a copy of one page of the service manual of the ZX Printer, which came out in 1981. I also had one for printing endless lines of Z80 disassembly code (mostly for cracking the copy protection of video games, see “print” on the right). At the top center there is a Technic 4.5V motor (#6216), a Technic disk with 4/8 black sections (#2958) attached to the hole of an 4.5V light sensor brick (#1161); actually the latter has an IR emitter and IR sensor inside. The Interface A powers and reads these and thus the status of the disk: Black = 1/off, white = 0/on. TCLogo running on a PC samples the >change event< with 1kHz temporal resolution, has two counters, and calculates the frequency of the changes, among other things, and makes them all available to the user. Well written assembly code >is< fast … On the bottom there is the main board of the ZX Printer along with its DC motor – and a disk and the light emitting diode. The disk has transparent and reflective sections (many more as compared to the Technic disk) but the principle of operation is absolutely the same. The Ferranti ULA took care of all the above; the Spectrum (or ZX81) just had to send “make dot”. Here we go: Inside my Speccy, the address lines A5 to A7 and the I/O request (IORQ#) line of the Z80 CPU are already hooked up to provide 8 “chip enable” signals (L=enabled), that I can “freely” use. Due to the “interesting” I/O port address decoding of the Spectrum’s very own hardware (>every< even address activates something in the ULA – Ferranti’s uncommitted logic array chip. It does almost everything other than CPU/memory stuff), care has to be taken upon addressing further I/O ports. Address 1 works, 2 does not, 3 works etc. Sinclair did that for cost saving purposes of course, as the address decoding is kept to the absolute minimum. The Z80 CPU has 16 address lines, which means a lot of decoding to filter out one specific address. Now, other add-on hardware (Sinclair Interfaces 1 and 2, or one of the myriads of third party vendor products, for example) then need to tip-toe between the even addresses – and when they went cheap as well, entire address ranges are blocked as well. Back then (1986 that is) I “blocked” the address range A5 - A7 with all A0 – A4 = 1 (no even addresses!), which gave me 31 (0x1F, bin 1 1111), 0x3F, 0x5F, 0x7F, 0x9F, 0xBF, and 0xFF as I/O port addresses. My ZX Interface 1 does not use these, so they actually work, even today. I used I/O port 1 = 0x1F for 32k bank switching, 0x3F for turning an LED on and off. The latter is the port I am using here to control #9750 as well. The BASIC commands are (as usual …): OUT 63, data (data = 0 to 63 for any of the 6 channel configurations) – this turns also the front panel LED on LET i = IN 63 (which returns the status of the 6 9750 output channels as well as the 2 sensor channels – this also turns the LED off). I simply copied the LEGO #9771 ISA card approach using two 74LS373 transparent D-flip flop latched as described in detail here. This is a rather elegant way of getting instantaneous feedback on the output status using rather cheap, but electrically powerful chips (TTL drivers). I/O address decoding is done in the Spectrum’s gut as shown in lower left blue box in the schematic below, with the 3 “extra” (see below) lines RD#, WR#, CE#: How does it work? When the Z80 writes to an I/O port, it puts the corresponding address on the address bus, pulls IOREQ# low, puts the corresponding data on the data bus and then pulls WR# low. The address is decoded by 74154; the corresponding output (0 – 15) goes low, but only when the chip’s outputs are enabled, which is the case, when EN1# and EN#2 are both low. EN2# is always low as it is tied to GND, EN1# when IOREQ# is low. IC3c (NOR gate) receives the Q1# output signal on one input, WR# on the other. When both are low, C of IC5a goes high and the transparent latches follow the signal at its 8 (6 only used for #9750) D inputs which are connected to the data bus of the Speccy. During this time, the Z80 holds the data from the BASIC "OUT" command static on the data bus. Upon pulling C high again (write cycle is over), IC5b freezes-in the 8 data inputs and clocks them onto the corresponding Q outputs connected to #9750. As OC# is always low, the outputs of IC5a are always enabled. When the Z80 reads from an I/O port, essentially the same things as above happen; now the RD# line is pulled low (somewhat delayed, i.e., closer to the rising edge of IOREQ#), and data are transferred to Z80 the accumulator register. However, the outputs of IC4a, again transparent D latches, are only enabled, when the correct address + IOREQ# + RD# is active, i.e., for a very brief moment. It has to be this way, because the Q outputs of IC4a are connected to the system’s data bus and would crash it at once when RD# goes high again (read cycle done). Most of the time pin C of IC4a is high (in contrast to IC5a, where it is always low = enabled), so the Q outputs are in tristate (high impedance or simply “not there)”, but the D inputs constantly read a) the state of IC5a’s outputs and b) the two sensor lines from 9750, i.e. they are always up to date. Upon a valid read request, pin C of IC4a goes low – at the same time its outputs are enabled: #9750 status freezes-in and is clocked onto the Q outputs = Z80 data bus. I like this approach using the transparent latches very much! This is of course owing to the fact that TLG’s programs (TCLogo and the like) write the “code” 00010101 (0x15) to #9750, then read back the #9750 status (the sensor readings are stripped, as they may have changed in between OUT and IN). The remaining connections required for the interface (data lines D0 – D7, +5V, GND) are obtained from the edge connector of the Spectrum’s PCB. Although I have the corresponding bare plug, I wanted to use the ZX Printer cable and case as interface box, as an homage to Sir Clive Sinclair : For the parallel Atari and the serial PC interface (USB and/or RS232), I made brick-built cases. Initially I tried using an Intel 8255 PIO (https://en.wikipedia.org/wiki/Intel_8255) as communication hub for #9750 (= total overkill, but I had three of the PIOs) – because it is a fun chip, debuting in the mid 1970’s. I guess I got the addressing wrong; a 8255 wants to know, what to do upon powering up, default is all three 8-bit I/O ports = inputs. I could not get the configuration right – I guess the ULA was addressed as well and things totally screwed up. I shall give it a second try “later”. I thus reverted to TLG’s “2x 74LS373” design, and made a perfboard version of the circuit shown in the schematic above, which fits into the ZX Printer case. I used the original printer cable (rewired inside the plug, as the printer uses other signals then #9750, such as address lines) and made no changes to the outer appearance of the printer. There are only 12 wires available; thus the 3 extra wires from the Speccy came in handy as additional inputs to the interface. Absolutely not nice, but: works. I guess a black ribbon cable looks nicer, but right now I don’t have one. Upper two pictures: (Left) Perfboard mounted into the printer case and (right) connector to #9750 and address decoding board. The latter is simply tying together RD#, WR#, and CE# controlling the C and OC# inputs of the two 74LS373. I made this extra board so that a different approach using 74LS374 just requires exchanging them for the 373’s (they have the same pinout), which are clocking in the data upon any rising edge at their CLK input (recall that 373’s freeze in data when C = low and set their outputs accordingly; no edge trigger required, and the Q outputs follow the D inputs when C = high). 374’s thus need a slightly different address decoding using NOR gates – and thus only the additional board needs to be replaced. This board is attached with Dupont type connectors. Upper two pictures: Finished interface without (left) and with (right) metalized paper roll inserted. I need to make a cover for the soldered pins of the 20 pin flat cable connector I desoldered from an old Shimadzu mass spec in the lab; otherwise the paper may cause shorts. Almost forgot: The switch S1 in the schematic above is actually the original paper feed switch of the ZX Printer, located at the top right of the case. Sinclair used this switch upside down: The knob sits in a fitting mount on the bottom of the printer case; a plastic rod extension with a little knob at its upper end is the switch’s actuator – you are pressing the switch body onto its fixed knob – I love it. Simply ingenious. In my setup, the switch pulls the "OC#" line of IC 5a high, and thus turns it's outputs off - should something go wrong on your TC LEGO model and #9750 is not in reach. And finally here is the entire ZX Spectrum + ZX Printer interface + LEGO Interface A – the program running is the old-fashioned TLG version; but this time, the presence of #9750 and the interface is checked by asking for the answer to the ultimate question of life, the universe, and everything, which is 101010 of course: BTW: I think the LEGO Interface A “look” very nicely matches up with the ZX Spectrum and ZX Printer design; too bad TLG did not see that, back in 1986. Sinclair BASIC at its best: The program does this: https://bricksafe.com/files/Toastie/zx-spectrum-and-9750/ZX9750.m4v Best wishes, Thorsten
  5. I was thinking after posting my tc11 entry, what would be your ideal contest on eurobricks? I thought about it and what if it was a c model contest, or a track car contest, or even a rally contest. I would love to hear your thoughts, Aventador Edit: I am not making a contest, I am just asking for thoughts