home.social

Search

124 results for “bread80”

  1. The first stage of my CPC ZERO build - a hypothetical 6502 based Amstrad CPC taking inspiration from the prototype 6502 board and the final Z80 based CPC464.

    I'm using period appropriate hardware, wire wrapping the build, and solving design challenges the way they had to in the eighties.

    In this zero-th part I state my design goals, choose a build method and build out the CPU and ROM.

    bread80.com/2024/11/01/cpc-zer

    #CPCZERO #Amstrad #MOS6502 #WireWrapping

  2. I've just pushed a very long overdue update to my Datapoint 2200 repository.

    New stuff includes schematics for video, keyboard and keyboard logic.

    I've added a fair few LEDs to the processor PCB for most of the main registers, but I need to analyse which other signals deserve to have them.

    I also need to add some photos and PCB renders to the readme.

    github.com/Bread80/Datapoint22

  3. I've just pushed a very long overdue update to my Datapoint 2200 repository.

    New stuff includes schematics for video, keyboard and keyboard logic.

    I've added a fair few LEDs to the processor PCB for most of the main registers, but I need to analyse which other signals deserve to have them.

    I also need to add some photos and PCB renders to the readme.

    github.com/Bread80/Datapoint22

    #Datapoint #Datapoint2200

  4. I've just pushed a very long overdue update to my Datapoint 2200 repository.

    New stuff includes schematics for video, keyboard and keyboard logic.

    I've added a fair few LEDs to the processor PCB for most of the main registers, but I need to analyse which other signals deserve to have them.

    I also need to add some photos and PCB renders to the readme.

    github.com/Bread80/Datapoint22

    #Datapoint #Datapoint2200

  5. I've just pushed a very long overdue update to my Datapoint 2200 repository.

    New stuff includes schematics for video, keyboard and keyboard logic.

    I've added a fair few LEDs to the processor PCB for most of the main registers, but I need to analyse which other signals deserve to have them.

    I also need to add some photos and PCB renders to the readme.

    github.com/Bread80/Datapoint22

    #Datapoint #Datapoint2200

  6. I've just pushed a very long overdue update to my Datapoint 2200 repository.

    New stuff includes schematics for video, keyboard and keyboard logic.

    I've added a fair few LEDs to the processor PCB for most of the main registers, but I need to analyse which other signals deserve to have them.

    I also need to add some photos and PCB renders to the readme.

    github.com/Bread80/Datapoint22

    #Datapoint #Datapoint2200

  7. @bread80

    Instrument screenshots are better with #LXI .

    sudo apt-get install lxi-tools

  8. The caller has to copy the data into the correct stack location. The challenge is that the caller is not in the function's stack frame, so it's need to calculate where data must go as an offset from the current SP. And that offset will depend on how many parameters are still to be pushed on the stack.

    The code here isn't actually very complex, but it's a mind freak.

    Here's the function dispatch which generates IL for the copies. V is the callees variable.

    #quichelang #quiche #compiler #z80

  9. Last up is value parameters for 'pointered types' (those which are passed via pointers rather than in registers). The function needs to be able to modify the data without affecting the original value. That means a 'hidden' copy of the data (the array) into the function's static variable space. No data need be passed in registers - the function can use the static address of the variable/data.

    #quichelang #quiche #compiler #z80 #pascal #delphi

  10. That wasn't too difficult to get working. The atomic unit of expressions is the TExprSlug, either for the result of an expression, sub-expression or function. The slug then gets assigned to a variable.

    I added a field to the Slug to point to the location in the IL which loads the pointer before the call - the pointer to where to store the result data. Then updated the write-slug-to-variable code to detect this field.

    The code shows nested calls with a temp var.

    #quichelang #quiche #compiler

  11. Moving on to the scenario where the function return value is a pass by reference. To do this the caller needs to pass a pointer to the data location so the function can write to it.

    Currently the expression parser has no knowledge of where a function result will be assigned. I’ll probably end up checking if the result is pass by reference and, if so, find or create the target variable and pass it into the function dispatcher.

    #quiche #quichelang #compiler #z80 #pascal

  12. I'm doing the detailed work on access specifiers and parameter passing.

    Today's update is CONST arguments. Variable data now has an IsConst field and there's an assertion when incrementing the 'write version' of the variable - which aids testing and helps track down code which needs updating.

    Writing to a CONST variable now fails, as does passing to as a VAR or OUT argument.

    #quiche #quichelang #compiler #z80 #delphi

  13. The key switches I chose for the Datapoint 2200 keyboard required a plate so I made one up. Done as a PCB it’s not cheap but the Matt black finish works really well.

    The only issue is that it slightly obstructs a couple of capacitors 🙁

    I still need to source the hardware to properly mount it to the keyboard.

  14. The key switches I chose for the Datapoint 2200 keyboard required a plate so I made one up. Done as a PCB it’s not cheap but the Matt black finish works really well.

    The only issue is that it slightly obstructs a couple of capacitors 🙁

    I still need to source the hardware to properly mount it to the keyboard.

    #datapoint #datapoint2200

  15. The key switches I chose for the Datapoint 2200 keyboard required a plate so I made one up. Done as a PCB it’s not cheap but the Matt black finish works really well.

    The only issue is that it slightly obstructs a couple of capacitors 🙁

    I still need to source the hardware to properly mount it to the keyboard.

    #datapoint #datapoint2200

  16. The key switches I chose for the Datapoint 2200 keyboard required a plate so I made one up. Done as a PCB it’s not cheap but the Matt black finish works really well.

    The only issue is that it slightly obstructs a couple of capacitors 🙁

    I still need to source the hardware to properly mount it to the keyboard.

    #datapoint #datapoint2200

  17. The key switches I chose for the Datapoint 2200 keyboard required a plate so I made one up. Done as a PCB it’s not cheap but the Matt black finish works really well.

    The only issue is that it slightly obstructs a couple of capacitors 🙁

    I still need to source the hardware to properly mount it to the keyboard.

    #datapoint #datapoint2200

  18. The first working test of pass-by-reference for arrays in register calling convention. Each variable has an addressing mode. The parameters use vaStaticRef - a static variable with a reference to the actual data address.

    The code generator knows how to get from the addressing mode to the required data.

    #quichelang #quiche #compiler #z80

  19. Bounds checking added to array indexing. Surprisingly easy - I just needed to add a call to the GenRangeCheck function, passing in the register, plus from- and to-types.

    And a few edge case glitches solved largely around primitive selection, which was affecting the register in which the index was being passed.

    #quichelang #quiche #compiler #z80

  20. Array support in Quiche is progressing nicely. I've added support functions Low High, Sizeof and Length, and now code to adjust for non-zero lower bounds when dereferencing an element.

    Currently only for static array variables - pointer based derefencing will be the next step.

    Images show the source and assembly code. I've hand added comments to the assembly. Plenty of room for optimisation here.

    #quiche #quichelang #compiler #z80 #pascal

  21. One challenge was the address bus between multiplexers and DRAM. I'm keep to preserve the layout from the prototype which with the CPU 'plexers at the top (U30, U31) and video 'plexers at the bottom (U40, U41) with RAM in a grid between them.

    The obvious route would have been to fork the signals to run down each column of RAMs. But forks create reflections. And these are driven from either end so I'd end up with loops.

    I ended up snaking them left then right. Not ideal but better.

    #CPCZERO

  22. Over the weekend I routed the main data bus between CPU, expansion port and RAM inputs etc., the RAM data bus, control signals to the expansion port, and signals within the RAM and multiplexers.

    Today I've been adding the long distance signals between I/O and CPU and their origins, as well as those to the 'tape port' connector (to the cassette deck and speaker in a CPC).

    #CPCZERO

  23. Added:
    CPU and ROM (top)
    Expansion connector (bottom-right)
    RAM (left)
    Control logic (centre)

    And routed the address lines.

    There's more room left that I was expecting so I'm being less stingy with chip spacing. I'm hoping I don't regret that!

    I found there was room to return to a ZIF socket for the ROM, which will be very helpful!

    I'm doing a lot of pin remapping to ease the routing.

    #CPCZERO #Amstrad_cpc

  24. Next to see why Kicad isn't drawing the board outline. It turns out the footprint for the audio jack include board edges. It's a low profile socket with the port below board level. But Amstrad mounted the socket slightly forward of the board, cutting some mounting lugs in half.

    I've tweaked the footprint to remove the board edges, and added some 'nibbles' for the mounting lugs.

    #CPCZERO

  25. After far too mush hassle the printer port is now routed.

    Amstrad schematics claim it's a 36-way connector, even in a 6128. It's not. It's 34! That gives an off-by-one numbering error on the rear pins. And there's few discrepancies between schematics and PCBs, largely over which pins are grounded. I've copied from an actual machine.

    I've also tightened up the gaps between traces for joystick and printer. They're slow signals and I'd prefer board space for other things.

    #CPCZERO #Kicad

  26. On the #CPCZERO project I've been debating whether to finish designing all the video and interrupt circuitry or whether to do a board as-is with connectors to add video on a daughter board later. The latter potentially needs less board revisions but would add a lot of time while I get the remaining design finished. So I'm going with the first option and starting board layout.

    The other unknown is how much space I'll need. But I know things are going to be tight.

    1/2

  27. Top row numbers can be shifted and keypad numbers can't. Both share an edge detector circuit and multiplexer 'line'. Top row key short to ground whereas keypad key have an SIO (or S10) signal. The keyboard logic board uses an analogue edge detector with 74121 pulse generator.

    On the Pico I'm handling this by driving the SIO line low. When a keypress is detected I drive it high. If the keypress is still detectable then it's a top row key. If not then keypad.

  28. Top row numbers can be shifted and keypad numbers can't. Both share an edge detector circuit and multiplexer 'line'. Top row key short to ground whereas keypad key have an SIO (or S10) signal. The keyboard logic board uses an analogue edge detector with 74121 pulse generator.

    On the Pico I'm handling this by driving the SIO line low. When a keypress is detected I drive it high. If the keypress is still detectable then it's a top row key. If not then keypad.

    #Datapoint2200 #Datapoint #keyboard

  29. Top row numbers can be shifted and keypad numbers can't. Both share an edge detector circuit and multiplexer 'line'. Top row key short to ground whereas keypad key have an SIO (or S10) signal. The keyboard logic board uses an analogue edge detector with 74121 pulse generator.

    On the Pico I'm handling this by driving the SIO line low. When a keypress is detected I drive it high. If the keypress is still detectable then it's a top row key. If not then keypad.

    #Datapoint2200 #Datapoint #keyboard

  30. Top row numbers can be shifted and keypad numbers can't. Both share an edge detector circuit and multiplexer 'line'. Top row key short to ground whereas keypad key have an SIO (or S10) signal. The keyboard logic board uses an analogue edge detector with 74121 pulse generator.

    On the Pico I'm handling this by driving the SIO line low. When a keypress is detected I drive it high. If the keypress is still detectable then it's a top row key. If not then keypad.

    #Datapoint2200 #Datapoint #keyboard