@bread80@mstdn.social avatar

bread80

@bread80@mstdn.social

Amstrad CPC, RC2014, Z80, Raspberry Pi Pico, TTL processors and the occasional bit of Eurorack

This profile is from a federated server and may be incomplete. Browse more on the original instance.

bread80, to random
@bread80@mstdn.social avatar

I’m secretly happy about the Sonos app-pocalyse. It’s given me the kick I needed to finally ditch it and move to something (hopefully) better.

bread80, to random
@bread80@mstdn.social avatar

I/O on the 2200 (as I'm understanding it) :

The instructions are similar to the i8008. Bits 4 to 1 of the bytecode code the I/O port. 32 addresses, but the first 8 are inputs, mapped to instructions IN 0..7. The remaining 24 are outputs mapped to instructions OUT 0..23.

The Datapoint uses the instruction EX for outputs (short for external IIRC)). Rather than port numbers it uses names. The first 8 are generic:
EX ADR
EX STATUS
EX DATA
EX WRITE
EX COM1 though EX COM4
🧵

bread80, to random
@bread80@mstdn.social avatar

I'm adding a basic terminal to the 2200 simulator. It's listening to output ports (input still to do).

Here's a video of it saying "Hello World" in it's own fashion. Program listing in video comments.

https://youtu.be/FzSDf94Q0Ao

bread80, to random
@bread80@mstdn.social avatar

RIP Z80 🥲

End of life notification letter:
https://www.mouser.com/PCN/Littelfuse_PCN_Z84C00.pdf

bread80, to random
@bread80@mstdn.social avatar

Returning to the simulator to try and fix a thorny issue that's been eluding me for a while.

The four chips at the bottom are '193 counters which normally house the program counter. Above are a row of '153 4-to-1 multiplexers. These can load an address from the stack, the H, L registers or the temp address register (for inline jump, call addresses).

bread80, to random
@bread80@mstdn.social avatar

"A programmer that's never programmed a computer in binary is like a child that's never run barefoot over Lego."

Also can you spot the schoolboy error in the first line of code? Which means all the jump target addresses are wrong and I need to redo a lot of stuff.

bread80, to random
@bread80@mstdn.social avatar

If you’re making an audio player and I press the back button two seconds into a track it probably means I want to play the previous track, not skip back to the beginning of the current one.

bread80, to random
@bread80@mstdn.social avatar

I’m reading up on this XZ security issue. Does it affect the XZ80 and XZ81 or is it only the XZ Spectrum that’s at risk?

bread80, to random
@bread80@mstdn.social avatar

I fixed the ALU issue. The clock input of the carry flag latch wasn't triggering. The circuit uses a couple of open-collector gates and a pull-up. A bug in my simulator failed to recognise the net's rising edge.

A few upgrades to the simulator so it can free run and some speed ups. Below is after adding 1 to A and looping until the carry flag is set, using a JFC (Jump if Carry False) and HALTing.

bread80, to random
@bread80@mstdn.social avatar

Todays test program: load values into the A and B registers, add (or subtract) them and loop.

I've got the jump working but the ALU ops are not so pretty. It's inverting each bit of A if the bit in B is set. The circuit for the ALU is all standard gates, and I'd be surprised if there's any bugs in there given the rest of the simulator is working so well.

So it's probably a schematic issue, and one which will take a bit of debugging.

bread80, to random
@bread80@mstdn.social avatar

I've spent much of the weekend working on my gate level logic simulator of the 2200 serial processor.

Here it is after processing a LA 6 instruction, which loads the immediate value 6 into the A register (6 is also the bytecode for LA n).

So far the schematics have functioned flawlessy, the only bugs have been in the simulator code.

bread80, to random
@bread80@mstdn.social avatar

Popping a 6128 HAL memory manager into the and initial tests are passing.

The code here reads a memory address, then swaps that address to a different bank. The value read is now different. It pokes in a known value and swaps to one of the higher banks in the 512k SRAM. This reads back yet another value.

Finally it switches back to the previous extended bank. The value read back is the value poked into it.

bread80, to random
@bread80@mstdn.social avatar

That’s what I call a good start to the weekend 🙂🙂🙂

The only soldering error was a short between power and ground on the USB power connector.

Design wise the backplane has a couple of footprint issues, and my attempt to keep the board smaller by placing components under and between the cards is proving less than ideal in practice. The taller components are actually fitting between the cards but it looks messy and there’s potential for damage from soldered pins.

Top 3/4 view of the computer showing the vertically mounted cards. One board has a row of green LEDs lit at various brightnesses.
Side view of tue computer with video out and other connections.
Top down view.

bread80, to random
@bread80@mstdn.social avatar

Interesting bug Thursday.

The date picker in Quickbooks online has some lovely keyboard shortcuts. Use W or K for the first or last day of the week, as in WeeK. The same for MontH and YeaR.

But this month H moves to the 30th March instead of the 31st. I wonder if it's a leap year bug? But the rest of this year works properly, as does March 2028.

bread80, to random
@bread80@mstdn.social avatar

I apologise for not posting this earlier.

is now alive! (At least Conway's variant of alive). The initial version was slow - about four seconds per generation. It was multiplying coordinates for each cell read and write.

The second variant uses offsets into each liner buffer, and only redraws changed cells. It's now running at three to four generations per second.

The next generation of the glider.

bread80, to random
@bread80@mstdn.social avatar

See if you can spot the upside down TVS diode.

bread80, to random
@bread80@mstdn.social avatar

This week I added the Peek() and Poke() intrinsics to the . That means I can now write my first non-trivial program.

I spend this morning fixing a few bugs in the parser and code generator and it's successfully generating the assembler file.

The assembler is choking on a couple of issues with identifiers, and the output code has a couple of bugs to do with parameter parsing and result processing.

Very close to working <g>

A section of the output assembler code.

bread80, to random
@bread80@mstdn.social avatar

Everyone: Amstrad is back!

Me: That kerning is atrocious.

bread80, to random
@bread80@mstdn.social avatar

This is the table I now have. Columns are the input (variable) type. Rows are the primitive type.

A value of zero means no type conversion is necessary. A value >=10 means there's potential data loss. I.e. the type has to be shrunk[1].

[1] An example of this is the Peek() function. It needs to be able to accept Real and Integer types, but it needs to validate they're within range (if validation is on).

bread80, to random
@bread80@mstdn.social avatar

Finally arrived. After celebrating a little too long and hard over Chinese new year.

bread80, to random
@bread80@mstdn.social avatar

“Use our online chat support. We’ll reply when we get around to it. Could be ten minutes, could be thirty minutes :shrug:. If you so much as blink we’ll terminate the session and you’ll have to go back to the beginning and start all over again.”

PS never use Bluehost. Regretted it the moment I set up the account.

bread80, to random
@bread80@mstdn.social avatar

All of the operators are now passed over to the new data tables and primitive search. I'm moving onto intrinsics. These are small routines with function-like that often generate inline code, such as peek, inp and sizeof.

Many of these have quirks such as accepting multiple types, or a typedef. The quirk of Abs is unsigned values: in doesn't affect them. I could raise an error but it's nicer to fake the data to not generate any code.

An extract from the primitives spreadsheet. The row for Integer type is normal. The next two rows are for Byte and Word input types. The 'Proc' column contains 'empty' which signals the code generator to not generate any code.

bread80, to random
@bread80@mstdn.social avatar

Returning to the Z80 ALU core implemented in relays. The first task is to redo the relay symbols. Kicads default generic relay shows the solenoid repelling the contacts, rather than attracting them. It's messing with my head.

In the image I've update the two symbols on the left. The rest are still defaults.

(PS Kicad only has a generic symbol for the single pole relay. I extended this to create the tow and three pole versions).

bread80, to random
@bread80@mstdn.social avatar

And I only just found this. I didn’t realise the Flan name actually made it into production.

This means it’s a revision 4 board, from the first production run. The run with bugs in the video chip and ROM.

bread80, to keyboard
@bread80@mstdn.social avatar

I want to see if I can make my keyboard a bit less ‘squidgy’. I’ve bought a selection of the thinnest tactile switches I can find to experiment with. The switches here run from 0.8mm to 2.5mm.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • Leos
  • GTA5RPClips
  • osvaldo12
  • thenastyranch
  • DreamBathrooms
  • khanakhh
  • magazineikmin
  • InstantRegret
  • Youngstown
  • slotface
  • mdbf
  • love
  • kavyap
  • rosin
  • megavids
  • everett
  • cubers
  • ethstaker
  • Durango
  • ngwrru68w68
  • tacticalgear
  • modclub
  • cisconetworking
  • provamag3
  • anitta
  • normalnudes
  • tester
  • JUstTest
  • All magazines