Hopper Development Environment
Hopper Development Environment
  • 111
  • 17 149
Tigger C: a file system on 6502 for I2C serial EEPROMs
Tigger C generates efficient code for the 6502: fast and compact. Tigger C is written in Hopper and takes advantage of the Hopper 6502 Assembly toolchain.
This is a walkthrough of the implementation of a small file system for serial I2C EEPROMs like the one on the Hopper 6502 SBC.
Tigger C string and file library documentation on GitHub:
github.com/sillycowvalley/Hopper/blob/main/Source/Languages/TiggerC/Library.md
64K Serial EEPROM file system overview:
github.com/sillycowvalley/Hopper/blob/main/Source/Languages/TiggerC/64K%20EEPROM%20File%20System.md
Oscar 64 compiler on GitHub:
github.com/drmortalwombat/oscar64/blob/main/README.md
มุมมอง: 71

วีดีโอ

Tigger C : an efficient 6502 C compiler
มุมมอง 5Kวันที่ผ่านมา
Tigger C is very close to C and generates efficient 6502 code: fast and compact. Tigger C is written in Hopper and takes advantage of the Hopper 6502 Assembly toolchain. Tigger C documentation on GitHub: github.com/sillycowvalley/Hopper/blob/main/Source/Languages/TiggerC/ReadMe.md Samples shown in this video: github.com/sillycowvalley/Hopper/tree/main/Source/Languages/TiggerC/Samples Hopper rel...
Hopper : all about the file system
มุมมอง 24414 วันที่ผ่านมา
- Explaining the design choices for the Hopper File System. - Coverage of Path, File and Directory units. Hopper on GitHub: github.com/sillycowvalley/Hopper
Hopper FORTH on 6502 : sneaky tricks and improved performance
มุมมอง 5428 วันที่ผ่านมา
Creative use of a list of variants to have two values per list member: - the actual value of the member (integer, string, etc) - the type of the member: - int : integer literal - byte : built-in FORTH word - uint : user defined FORTH word - string : string literal or not-yet-tokenized word Source for this sample: gist.github.com/sillycowvalley/8b244ee6e7ebc07a5375c128d0c598f5 Hopper FORTH Docum...
HopperFORTH on Raspberry Pi Pico and 6502
มุมมอง 9528 วันที่ผ่านมา
A minimal FORTH implemented in Hopper as a test application for the Minimal Runtime on the 6502 to properly exercise the recently added 'list' reference type. HopperFORTH: github.com/sillycowvalley/Hopper/tree/main/Source/Languages/FORTH Hopper on GitHub: github.com/sillycowvalley/Hopper
Hopper on Teensy 4.1 - first steps ..
มุมมอง 95หลายเดือนก่อน
The Hopper Portable Runtime is now running on the Teensy 4.1 I need a bit of help figuring out how to get LittleFS or some other file library working on the Teensy to finish implementing the Hopper file system. Also need help getting attachInterruptParam(..) working. Volunteers with more Teensy experience than me? - SD card support - attachInterruptParam(..) - timer APIs Hopper Arduino code on ...
Hopper on 6502: 'list' and 'record' types added
มุมมอง 31หลายเดือนก่อน
I've implemented the 'list' reference type in the 6502 runtime which also gives us 'record's (since the Hopper compiler uses list of variant type members internally to implement records) Hopper on GitHub: github.com/sillycowvalley/Hopper
Hopper Minimal Runtime: float and long on the 6502
มุมมอง 267หลายเดือนก่อน
My experiment using Chat GPT to help me implement an IEEE float library in Hopper to get hideously slow float support in the Hopper Minimal Runtime for the 6502 board. This proved to be a useful exercise in learning to code a non-trivial project that is outside of my domain using Chat GPT.
Hopper development using Chat GPT
มุมมอง 90หลายเดือนก่อน
I've created a Hopper language training document that you can paste into your instance of Chat GPT (Code Copilot) to reach it the Hopper programming language. Obviously this will continue to improve over time but it is already quite good. Notes from GPT about Hopper to its future / less informed self: github.com/sillycowvalley/Hopper/blob/main/Docs/Hopper Programming Language Overview for GPT.md
Hopper single board 6502 : final PCB
มุมมอง 257หลายเดือนก่อน
Progress report for my hardware project: a 6502 SBC designed to develop Hopper programs on and straightforward enough for anyone to build. If you are interested, comment here for an invite link to the Hopper Discord server .. Hopper on GitHub: github.com/sillycowvalley/Hopper Address decoding using CPLD: www.hackster.io/michael-cartwright/address-decoding-for-6502-using-a-pld-0d72ee Serial port...
Hopper Assembler on 65uino : games with sprites for the SSD1306 OLED
มุมมอง 83หลายเดือนก่อน
A sample 'game' illustrating how to write a game with sprites (for the SSD1306 OLED display using I2C) on Anders Nielsens' 65uino using the Hopper 6502 Assembler. ABNielsen 65uino: abnielsen.com/2023/03/28/65uino/ Source for this sample on GitHub: github.com/sillycowvalley/Hopper/tree/main/Source/Projects/65uino Hopper Releases: github.com/sillycowvalley/Hopper/releases
Sprite library for the SSD1306 OLED in Hopper
มุมมอง 205หลายเดือนก่อน
Simple sprite engine for 4x4 pixel sprites on an SSD1306 OLED without using a screen buffer: - minimal memory usage for the game scene - quick updating of the screen (only draw the sprite that has changed/moved) Prototyped on a Raspberry Pi Pico style microcontroller. Also runs on the 6502. The code: gist.github.com/sillycowvalley/eda0264a02fdeccd71a115c037c141aa Hopper Releases on GitHub: gith...
Hopper 6502 SBC: now has I2C and serial EEPROM
มุมมอง 78หลายเดือนก่อน
Progress on the hardware project: - first revision of PCB has arrived and been tested - support for I2C in the Hopper Minimal Runtime for 6502 - device driver for SSD1306 OLED - support for serial EEPROM to persist user Hopper programs Hopper Releases on GitHub: github.com/sillycowvalley/Hopper/releases 6502 SBC rev1.1 schematic: github.com/sillycowvalley/Hopper/blob/main/Source/Projects/6502SB...
I2C on the Hopper Minimal Runtime for 6502
มุมมอง 32หลายเดือนก่อน
Building on Anders Nielsen's work, I've got a bit-banged set of I2C APIs working in Hopper on the 6502 via the 65C22. ABNielsen.com: abnielsen.com/2023/03/28/65uino/ Source for this demo: gist.github.com/sillycowvalley/f250b845d457fdc97562ae9efab9a1a1 Hopper Releases on GitHub: github.com/sillycowvalley/Hopper/releases
Hopper Assembler on 65uino : code generation and optimization
มุมมอง 31หลายเดือนก่อน
The Hopper Assembler code generation and optimization includes features like: - automatic removal of unused methods or constant data - automatic removal of unreachable (dead) code in methods - automatic optimal short and long jump management (optimizer) - obvious optimizations like replacing JSR followed by RTS with JMP Hopper Releases: github.com/sillycowvalley/Hopper/releases
Hopper Assembler on 65uino : features of the IDE and Assembler
มุมมอง 38หลายเดือนก่อน
Hopper Assembler on 65uino : features of the IDE and Assembler
Hopper Assembler on 65uino : assembling your first program
มุมมอง 95หลายเดือนก่อน
Hopper Assembler on 65uino : assembling your first program
Hopper Assembler on 65uino : installing Hopper environment on Windows
มุมมอง 24หลายเดือนก่อน
Hopper Assembler on 65uino : installing Hopper environment on Windows
Hopper Assembler on 65uino : Introduction
มุมมอง 66หลายเดือนก่อน
Hopper Assembler on 65uino : Introduction
Hopper : 6502 Assembler Blink Example
มุมมอง 49หลายเดือนก่อน
Hopper : 6502 Assembler Blink Example
Blink : source level debugger for Hopper on breadboard 6502
มุมมอง 25หลายเดือนก่อน
Blink : source level debugger for Hopper on breadboard 6502
Breadboard 6502 to run Hopper
มุมมอง 80หลายเดือนก่อน
Breadboard 6502 to run Hopper
Hopper Minimal Runtime on Breadboard 6502
มุมมอง 44หลายเดือนก่อน
Hopper Minimal Runtime on Breadboard 6502
Hopper: Z80 Compiler for Hopper
มุมมอง 3502 หลายเดือนก่อน
Hopper: Z80 Compiler for Hopper
Hopper 6502 Assembler : what makes it different?
มุมมอง 1682 หลายเดือนก่อน
Hopper 6502 Assembler : what makes it different?
Hopper on 6502: debugging using the emulator on Windows
มุมมอง 1222 หลายเดือนก่อน
Hopper on 6502: debugging using the emulator on Windows
Hopper on 6502 : writing your first 6502 assembly program
มุมมอง 492 หลายเดือนก่อน
Hopper on 6502 : writing your first 6502 assembly program
Hopper on 6502: building the firmware for the RetroShield
มุมมอง 742 หลายเดือนก่อน
Hopper on 6502: building the firmware for the RetroShield
Hopper on 6502 : installing the Hopper environment on Windows
มุมมอง 232 หลายเดือนก่อน
Hopper on 6502 : installing the Hopper environment on Windows
Hopper on 6502 : intro to 6502 on RetroShield
มุมมอง 502 หลายเดือนก่อน
Hopper on 6502 : intro to 6502 on RetroShield

ความคิดเห็น

  • @bigfarfar219
    @bigfarfar219 8 ชั่วโมงที่ผ่านมา

    I see that you are using the ATF22V10C PLD chip, does it get hot? I'm using it in my 6502 computer design and it gets quite hot, and I was wondering if this is normal?

  • @DrMortalWombat
    @DrMortalWombat 11 ชั่วโมงที่ผ่านมา

    Great progress there. I tested the Sieve benchmark with Oscar64 on a C64 and got 12.5 seconds - so there may still be some easy gains for your compiler.

    • @biggertigger
      @biggertigger 11 ชั่วโมงที่ผ่านมา

      Nice. 1.023 MHz version, I presume. Out of interest, can you share the C code? Here is my version: gist.github.com/sillycowvalley/37afedf1cb7105e70ad7b51ce7cb8105

    • @DrMortalWombat
      @DrMortalWombat 10 ชั่วโมงที่ผ่านมา

      @@biggertigger This is the version I have based my test on, just hammering it into C shape with printfs, [] and clock_t. It is a PAL C64 running at 0.985MHZ. Without badlines and at 1MHZ we would be at around 11.4 seconds.

    • @biggertigger
      @biggertigger 10 ชั่วโมงที่ผ่านมา

      That's pretty darn impressive!

    • @DrMortalWombat
      @DrMortalWombat 10 ชั่วโมงที่ผ่านมา

      @@biggertigger You made the perfect comment at the three minute mark. The extrem disparity of modern compilers and systems and the potential code size of the target system allow for an amount of optimization that would not be possible in a reasonable amount of code and time when compiling on and to systems of comparable power. Oscar64 can easily consume gigabytes of RAM when compiling larger cartridge based games.

    • @biggertigger
      @biggertigger 9 ชั่วโมงที่ผ่านมา

      Can you share the disassembly for your version of main() for Sieve?

  • @soteful9949
    @soteful9949 วันที่ผ่านมา

    You may want to invest in a mic filter shield.

    • @biggertigger
      @biggertigger วันที่ผ่านมา

      I actually have one, just wasn't using it. My cloth ears can't hear the difference but I'm keen to learn more since the video part is clearly not one of my strengths. I just did some test recordings with it to see if I could hear the difference. Happy to be schooled on this .. already using the RNNNoise filter in OBS to remove my keyboard noise (on the advice of another viewer).

    • @soteful9949
      @soteful9949 23 ชั่วโมงที่ผ่านมา

      @@biggertigger Either that or get further back from your mic. It's picking up too much. Nice video though. I have videos up on my other channel, so I'm speaking from experience.

  • @anon_y_mousse
    @anon_y_mousse 2 วันที่ผ่านมา

    Cool project. I've been thinking about adding a 6502 target to my code generator. The best advice I can give you is to not use recursion, especially for such a limited platform. It's been my mantra for years to avoid recursion because it's rather easy to accidentally blow the stack when you have one, and worse when you don't. I am a little curious why you left the Fibonacci implementation as recursive since it's so easy to write iterative. Also, I'm curious if the 6502 detects overflow and throws an interrupt in such a situation since as you started writing that one loop it would've been infinite without it as an unsigned 8-bit value being used as a counter with an exit condition of `i <= 255` would loop infinitely. Luckily you changed it to 10, but if your compiler doesn't detect such cases you should consider adding some code to do so. An easy catch is when it's a constant, but if it's a variable that you can't immediately determine the value of, then a good rule of thumb would be if the typeof() the exit condition is unsigned then warn on it at the very least.

    • @biggertigger
      @biggertigger 2 วันที่ผ่านมา

      >I am a little curious why you left the Fibonacci implementation as recursive since it's so easy to write iterative. This is a deliberate test, usually fibo(24), to test both function call performance and that we have at least got reasonable stack depth capability. It was originally ported from MicroPython to benchmark the Hopper VM on RP2040 against MicroPython .. and then I found that it is also good test to check if we have a reasonable amount of stack depth .. For Hopper, I have a CHECKED build mode which does tons of stack limit checking and also checks that stack balance is as expected on exiting a function (SP same as it was on entry). I intend to add a CHECKED mode to Tigger C. Obviously it is not something you want in production code (and it also includes other checks like range checking on arrays, division by zero, etc)

    • @anon_y_mousse
      @anon_y_mousse 2 วันที่ผ่านมา

      @@biggertigger If you don't already, you should consider doing static checking in the compiler for obvious things. Loop conditions like `i <= U{TYPE}` should net a warning at least when you can't check the value and if they use a constant that matches U{TYPE}_MAX it should be an error.

    • @biggertigger
      @biggertigger 2 วันที่ผ่านมา

      Agreed. "for (byte i = 0; i < 256; i++)" is the common form of this mistake for Tigger C. Really should be caught at compile time. Another variant of this is "while (i > 0) { i--; }" for an unsigned type. Hopper currently catches neither of these ..

  • @notexactlysiev
    @notexactlysiev 5 วันที่ผ่านมา

    This is very cool! That llvm-mos project can generate fairly impressive code nowadays, but I still like seeing languages made specifically to target the 6502.

  • @billchatfield3064
    @billchatfield3064 6 วันที่ผ่านมา

    What are the tall yellow bars on your bar graph? They're not labeled so I can't see what you're comparing it to.

    • @biggertigger
      @biggertigger 5 วันที่ผ่านมา

      Yellow is the times or Hopper (which runs on a VM), orange Tigger C.

  • @billchatfield3064
    @billchatfield3064 6 วันที่ผ่านมา

    You might as well use Pascal or Modula-2 which has these features. It's going to be hard to remember the differences between this pseudo C and real C.

  • @tiggerbiggo
    @tiggerbiggo 6 วันที่ผ่านมา

    nice name

    • @biggertigger
      @biggertigger 6 วันที่ผ่านมา

      Couldn't agree more. :-)

  • @bugeyedcreepy
    @bugeyedcreepy 7 วันที่ผ่านมา

    Hey! Nice! this is Awesome! Also, Welcome to the MECB ecosystem too! can't wait to see more...! :D

    • @biggertigger
      @biggertigger 7 วันที่ผ่านมา

      I have a 6809 RetroShield on the shelf ... just started work on a 6809 toolchain for Hopper ...

  • @tmbarral664
    @tmbarral664 8 วันที่ผ่านมา

    Just a thought You may try a LDA $FF,X instead of DEX LDA $100,X ;)

    • @biggertigger
      @biggertigger 7 วันที่ผ่านมา

      Thanks. Well spotted. Had a problem with $00FF (probably because the Hopper 6502 Assembler saw it a $FF which would make it the zero page version of the instruction where adding X wraps back into the zero page). However, even $00FF, X is suboptimal because it causes the crossing of a page boundary (+1 cycle). So, the eventual implementation of your idea was put the offset of the MSB in X instead. Here's your DEX-less / INX-less version without the zero page wrap or extra page boundary cycle cost: // POPL [BP+0x00] // POP [0x01FF - BP -0] (16 bit) LDA ZP.BP SEC SBC # 0x01 TAX PLA STA 0x0100, X // MSB PLA STA 0x0101, X // LSB Or: // INCLI [BP+0x00] # 0x0001 LDA ZP.BP SEC SBC # 0x01 TAX INC 0x0101, X // LSB if (Z) { INC 0x0100, X // MSB } (and yes, the premble in these two cases should be LDX ZP.BP followed by DEX - this is what the code looks like between peephole optimizer and whole program optimizer)

    • @tmbarral664
      @tmbarral664 7 วันที่ผ่านมา

      @@biggertigger I believe you were mentioning something similar in the video so I may be repeating you…. 😀 But a further optimization here would be, for value of 1, to replace the SEC SBC #$01 By TAX DEX ;)

    • @biggertigger
      @biggertigger 7 วันที่ผ่านมา

      Yes. See the note at the end of my (long) reply above. Here's an invite link to the Hopper Discord server if you are interested in further optimizations ... :-) discord.gg/H8cVAvhK

    • @DrMortalWombat
      @DrMortalWombat 7 วันที่ผ่านมา

      @@biggertigger The main problem is the code representation on which you try to perform the optimizations. A stack based evaluation hides most interdependencies - you notice this in your video at around the 29 minute mark. Since the 70s compilers use intermediate representations that expose the dataflow, which culimated into SSA in the late 80s. The other problem is the low level at which you start optimizing. Compilers usually go through several levels of lowering from AST over SSAs with various levels of IL, and finally assembler with basic blocks. Each of these levels provide inside and optimization opportunities for the compiler, that cannot be done by later stages. So your compiler may benefit a lot, if you try to go with a more dataflow virtual register representation before the actual assembler.

  • @dr.ignacioglez.9677
    @dr.ignacioglez.9677 9 วันที่ผ่านมา

    I REALY LOVE 6502 ❤❤❤

  • @DrMortalWombat
    @DrMortalWombat 9 วันที่ผ่านมา

    The 6502 is in fact a nice target for a C compiler. And it does help, if the compiler plays to its strength, e.g. using zero page instead of stack allocated variables. Most code is non recursive, so a static allocation of local variables can be done with a simple call graph analysis.

    • @biggertigger
      @biggertigger 7 วันที่ผ่านมา

      Excellent suggestion. Thanks. Globals can now at a configurable location (any starting point and range in the zero page is an option, or just somewhere else in memory). I added call graph analysis (required lightweight first pass) and now I allocate most locals statically in the same location as the globals. With this, and other improvements, the Sieve benchmark is already running > 2x faster than in this video (2.3 seconds).

    • @espfusion
      @espfusion 6 วันที่ผ่านมา

      First time I've heard someone actually think 6502 is C friendly but I respect this perspective! If your whole program's live local variable footprint fits in 256 bytes you can manage okay but if not things could get tough. Not sure what the best strategy is then, maybe relocation? I don't think MOS made the wrong choice but if they found a way to fit a 16-bit SP or zero-page relocation thst may have been a game changer. Then again 6809 wasn't really ever that big so who knows.

    • @biggertigger
      @biggertigger 6 วันที่ผ่านมา

      I've moved on from benchmarks to use Tigger C to implement something useful: a little file system for the serial EEPROM on my 6502 SBC that runs the Hopper Runtime (virtual machine). Since Tigger C emits my Hopper 6502 Assembly syntax, I'll easily be able to prototype in C and then integrate the resulting assembly into the Hopper Runtime (which is all 6502 assembly). This exercise should prove one way or the other if Tigger C is actually good for anything in the real world ...

    • @DrMortalWombat
      @DrMortalWombat 6 วันที่ผ่านมา

      @@espfusion A stack is only one way to implement the calling semantic of C. Most real world programs that you want to run on these machines are not recursive, and thus local variables can be assigned to a "static" stack using call graph analysis. I have spent almost three years now implementing a C++ compiler for the 6502 (Oscar64) - and given the limitation of the potential programs that may be developed for the platform the CPU is an excellent design for a high level language target.

    • @espfusion
      @espfusion 5 วันที่ผ่านมา

      @@DrMortalWombat Understood, it's a good strategy. Still, even just storing the maximum live variable depth you're probably going to run out of zero page space pretty quickly, especially with competition from global/static variables and other housekeeping needed in zero page. You can start allocating the rest by absolute addressing but you'd still need pointers to be somewhere zero page at least temporarily, so I wonder if it's not usually better to just start spilling the oldest variables to and from absolute space in big blocks and writing the new stuff there... Also, while I do expect actual loop recursion isn't that common (and pretty easily specially cased) it's probably a lot more common to see the same functions appear at multiple sites in a call trace. I assume this would be handled at least to a point by aliasing the function into multiple versions but that becomes a bit of a code bloat problem.

  • @DavidLatham-productiondave
    @DavidLatham-productiondave 11 วันที่ผ่านมา

    8mhz on an 8086 could well be slower than your 8mhz 6502. The 8086 had many more cycles per instruction than the 6502. Most of the 6502 instructions are only 2 or 3 cycles long. Then you start getting into wait states for IO and other complexities the 6502 just doesn't have and these benchmark comparisons become hard to reason about.

    • @biggertigger
      @biggertigger 11 วันที่ผ่านมา

      Exactly. The 6502 shares its small instruction set and minimal cycles per instruction with later RISC processors. It's clear that the engineers at Acorn drew inspiration from the 6502 (used in their Atom and BBC Micro computers), influencing their design philosophy for the first ARM processors. Creating benchmarks where the 8086 excels would be straightforward: just perform multiplication or division using the MUL and DIV instructions, or leverage string-specific instructions like SCAS and CMPS. I'm pretty sure the Mandelbrot demo / benchmark would be way faster on an 8086 (thanks to IMUL and IDIV).

    • @DavidLatham-productiondave
      @DavidLatham-productiondave 11 วันที่ผ่านมา

      @@biggertigger yeah, I very conveniently failed to acknowledge the superior alu in the later processors. LoL. I should be in marketing.

    • @MechanicaMenace
      @MechanicaMenace 9 วันที่ผ่านมา

      ​​@@biggertiggerboth at the same clock speed I'm not sure. The MUL and DIV operations aren't very efficient. They helped reduce memory operations which back in the day did help the 8088 and 8086 make up for their lack of bandwidth and win out on multiplication and division but back then we were comparing ≈1mhz 6502s to ≈5mhz 8088/8086s, and in most other cases we thought of them being roughly equivalent. Both at 8mhz would see what? The 6502 at 8MiB/s, the 8086 at 4MiB/s, and the 8088 at 2MiB/s. I'm not sure even the native 16bit ALU could make up for that. Edit: this is me being curious rather than argumentative btw. I was more of a 68k weenie anyway 😋

    • @espfusion
      @espfusion 6 วันที่ผ่านมา

      It's not really a fair comparison because the 6502 basically needs 4-8x faster memory. At 8MHz in the early 80s you're probably already limited to SRAM. Hence why you didn't see > 4MHz 65xx until you got cards with small SRAM caches.

    • @biggertigger
      @biggertigger 6 วันที่ผ่านมา

      @@espfusion I've already got it running about 2x as fast as it was a week ago (2.2 seconds for the Sieve benchmark compared to 4.5 seconds in this video). Even after multiplying that by 8 to make up for my 8MHz clock, that's faster than anything on 6502 from the BYTE magazine article other than a pure assembly solution. Most of the speed improvment came from implementing a suggestion from @DrMortalWombat to use simple call graph analysis to determine which locals to use static storage for (zero page of course). The compiler uses what is available and then overflows into regular memory (which is still faster than BP+offset stack storage). With the exception of the Fibonacci sample, all local variables can be static. Arguments are still on the stack (obviously). One massive advantage we have over the gods of the 70's, like Woz for example, is our completely overkill development platforms. Back then it was mostly self-hosted which is incredibly impressive. So much easier for me to just focus on the outcome without worrying about how efficient the tools are.

  • @derekchristenson5711
    @derekchristenson5711 13 วันที่ผ่านมา

    Neat!

  • @DavidLatham-productiondave
    @DavidLatham-productiondave 19 วันที่ผ่านมา

    Heyo. Please can you invite me to the discord server?

    • @biggertigger
      @biggertigger 19 วันที่ผ่านมา

      See my reply on GitHub, or: discord.gg/QmZ68cmQ

  • @user-uq2ks2dr4p
    @user-uq2ks2dr4p 24 วันที่ผ่านมา

    That's a lovley looking PCB. I see two cyrstals. Does it have hardware serial too? I dont care for the max chip

    • @biggertigger
      @biggertigger 23 วันที่ผ่านมา

      Yes, my previous board last year used the MAX232 as per Ben Eater's design: www.hackster.io/michael-cartwright/rs232-using-the-motorola-6850-acia-with-a-6502-computer-33ea36 It seems kinda silly to convert from TTL to RS232 and then back again so this time I just went direct to FTDI. Current version with schematic can be found here: github.com/sillycowvalley/Hopper/tree/main/Source/Projects/6502SBC/EasyEDA/6502%20Machine/rev12

    • @user-uq2ks2dr4p
      @user-uq2ks2dr4p 23 วันที่ผ่านมา

      @@biggertigger Not a Max you dont need it. that is a voltage pump. As you would know. We really only need 0 and 5 volts. no Minus or 25+ stuff that was way back in the day when they had looooooong cables and they needed it. Today we use things like arduino and they just use 0 5 volt serial perfectly fine.

    • @user-uq2ks2dr4p
      @user-uq2ks2dr4p 23 วันที่ผ่านมา

      @@biggertiggerThat makes more sense to me as well. Ben Eater I am not sure why he would want to do that old rs323 as only older gear will be able to use it. I am glad you are working on Hopper cross platform. I am very quickly running out of love for the 65uino. If your very skilled with assembly and such I feel it would be great for you, but I am a newbie and I feel Anders great patience will run out very soon with me

    • @user-uq2ks2dr4p
      @user-uq2ks2dr4p 23 วันที่ผ่านมา

      I really like the look of hooper. I would love to check it out. I am getting a very basic Ben Eater PCB soon I hope. and I will be just doing newbie asm stuff with it, no trying to load code into ram.

  • @user-uq2ks2dr4p
    @user-uq2ks2dr4p 24 วันที่ผ่านมา

    I dont care for windows but I very much like the look of hopper

  • @user-uq2ks2dr4p
    @user-uq2ks2dr4p 24 วันที่ผ่านมา

    Maybe I can run Hopper with WINE? it looks very nice

  • @user-uq2ks2dr4p
    @user-uq2ks2dr4p 24 วันที่ผ่านมา

    This looks amazing can I run this Hopper on Linux?

    • @biggertigger
      @biggertigger 23 วันที่ผ่านมา

      I've been dabbling with a cross-platform version of the desktop runtime using Terminal.Gui (with .NET Core). I like this approach since it could give me a single version to maintain for Windows, macOS and Linux. If there is interest in that sort of solution, I'll continue with that project.

    • @user-uq2ks2dr4p
      @user-uq2ks2dr4p 23 วันที่ผ่านมา

      @@biggertigger That is great, as linux has a lot of tools to use. cross platform would be super nice.

  • @carlo_geiss
    @carlo_geiss 28 วันที่ผ่านมา

    no chat gpt please ... it's nonsens ...

    • @biggertigger
      @biggertigger 27 วันที่ผ่านมา

      That's what I believed too .. until I tested GPT 4. It excels at the boiler-plate / boring stuff. For example, generating documentation. Take a look at this page. It was entirely generated by GPT (zero edits, modifications or formatting by me : I just gave it the source code for my HopperFORTH and asked it to generate reference and user documentation). It may be a bit boring but it is a hell of a lot better than the documentation I would have written (nothing): github.com/sillycowvalley/Hopper/tree/main/Source/Languages/FORTH

  • @DaveVW
    @DaveVW หลายเดือนก่อน

    See some use of SD support in c-simple-emu6502-cbm project on my github, davervw, unified branch that does SD slightly differently on Teensy 4.1 vs. ESP32. I think the trick is Teensy supports multiple simultaneous filesystems differently.

    • @biggertigger
      @biggertigger หลายเดือนก่อน

      I've added some references to the source from the Teensy site (for SD and timers/alarms). The problem I'm having now is a conflict between the generic/Teensy SDFat library and the RP2040 library : it is a bit annoying that you don't seem to be able to keep them both installed at the same time.

    • @DaveVW
      @DaveVW หลายเดือนก่อน

      @@biggertigger Maybe I'll run into the same conflict with RP2040 when I get around to integrating it. Between ESP32 and Teensy I get warnings about multiple SD libraries but it seems to resolve. Maybe you can temporarily rename libraries to resolve the conflict. Maintenance nightmare though.

  • @instatemp
    @instatemp หลายเดือนก่อน

    I am working on a game using esp32 and oled display module, are you interested

    • @biggertigger
      @biggertigger หลายเดือนก่อน

      Sounds interesting. In C, I assume? I'd love to port it to Hopper as a demo on the RP2040 when you are ready with it. Here's an invite to the Hopper Discord server if you want to discuss: discord.gg/xbskyHGG

    • @instatemp
      @instatemp หลายเดือนก่อน

      @biggertigger getting an error saying the link is invalid

    • @biggertigger
      @biggertigger หลายเดือนก่อน

      @@instatemp They expire after a while. Here's a fresh one: discord.gg/D5qf4fHr

  • @user-uq2ks2dr4p
    @user-uq2ks2dr4p หลายเดือนก่อน

    It looks like the screen is in graphics mode?

    • @biggertigger
      @biggertigger หลายเดือนก่อน

      The SSD1306 OLED is essentially a matrix of monochrome pixels (it only has 'graphics mode'). My sprite engine works in 4x4 pixel cells because it is designed to minimize memory use on the CPU side : to have a memory map of the entire matrix of pixels would take 1K. The 65uino only has 128 bytes total. I keep track of my sprites rather than the entire display to make this possible. When running on my 6502 SBC we have 32K of RAM available so this is a non-issue (and the Hopper library keeps a 1K buffer for this screen and supports graphics and text APIs similar to the AdaFruit APIs for MCUs, but on the 6502).

  • @user-uq2ks2dr4p
    @user-uq2ks2dr4p หลายเดือนก่อน

    Very interesting. I am writing 6502 asm and I am translating some code. I am a neat freak and like things is the right places. I like my vars. EQUs at the started. I like my data at the end. I am using the as65 assembler and cl65 linker. I really like the idea and see what you can do with one of these displays. I am using Ben Eaters design. This gives me 16k or RAM *HUGE RAM* compared to 128 bytes. I am on a Linux machine. I want nothing to do with Billy's software. I have lots of breadboards and atmega328ps to play with, maybe its possible to set it up in my mintlinux?

  • @Brian_Of_Melbourne
    @Brian_Of_Melbourne หลายเดือนก่อน

    I'm trying to get an overview of the project, rather than detail. So I googled. This came up second: publications.lib.chalmers.se/records/fulltext/218906/218906.pdf Is this it?

  • @AndersNielsenAA
    @AndersNielsenAA หลายเดือนก่อน

    Nice board! It’ll do amazing things🎉 If you forced some suggestions out of me it would be to round the edges, add a ground pour, and maybe break out all busses and control signals .. but that takes space too :) I’m sure you’ll be happy with it 😊

    • @biggertigger
      @biggertigger หลายเดือนก่อน

      Yes, there is room for a revision by someone that isn't a software guy. ;-) (the top layer is indeed filled (GND))

  • @DaveVW
    @DaveVW หลายเดือนก่อน

    I like the PCB! Great work!

  • @DaveVW
    @DaveVW หลายเดือนก่อน

    Hint: I've had boards built with 6-pin holes staggered back and forth just a bit so they grab the FTDI pins very well, and only a tiny extra resistance putting in, but the plus is an even better connection without soldering. I stole the idea from others.

    • @biggertigger
      @biggertigger หลายเดือนก่อน

      You mean like a minor zig-zag and just regular thru-plated holes?

    • @DaveVW
      @DaveVW หลายเดือนก่อน

      @@biggertigger exactly!

  • @AndersNielsenAA
    @AndersNielsenAA หลายเดือนก่อน

    That is so cool 😎 And it doesn’t look like you’re missing cycles for smooth updates at all. Exactly what the 65uino was made for 🎉

  • @AndersNielsenAA
    @AndersNielsenAA หลายเดือนก่อน

    Nice progress! 🎉 The next version of the 65uino will also have an i2c EEPROM for exactly that reason - besides being able to erase and write to its own ROM if it’s 5V/flash based.

  • @petermuller608
    @petermuller608 หลายเดือนก่อน

    The IDE reminds me of the good old Turbo Pascal days. Very nice

    • @biggertigger
      @biggertigger หลายเดือนก่อน

      Indeed. 'uses' and units are absolutely inspired by Turbo Pascal. My favourite time spent with Turbo Pascal was circa v4, just before objects were introduced. In Turbo Pascal they were a necessity to provide separate compilation units but the same structure still allows you to live without project files, a 'make' utility, etc. And then there are the obvious benefits (like encapsulation).

  • @paulscottrobson
    @paulscottrobson 2 หลายเดือนก่อน

    On my to watch list. Have you thought of using Agon (eZ80) or Neo6502 (65C02) as your base machine (Disclaimer: I'm one of the firmware authors on the latter !) ; they're fairly cheap (£50/£30) stand alone machines. (eZ80 is *very* like a fast Z80 with 24 bit address registers if you don't know it)

    • @biggertigger
      @biggertigger 2 หลายเดือนก่อน

      I have two Neo6502's and I'd appreciate a little help getting from zero to WozMon using the Arduino IDE. After that, I'd be able to get my 6502 runtime working on it. Need to simulate RAM, ROM and an ACIA (prefer 6850)

    • @biggertigger
      @biggertigger 2 หลายเดือนก่อน

      discord.com/invite/wsR6vBDC

  • @SainiSalami
    @SainiSalami 2 หลายเดือนก่อน

    Very impressive. Well done!

  • @sosoo383
    @sosoo383 2 หลายเดือนก่อน

    Increase the sound please!!!

  • @Thomas10962
    @Thomas10962 2 หลายเดือนก่อน

    So cool!!

  • @carlo_geiss
    @carlo_geiss 2 หลายเดือนก่อน

    very very nice idea ... i'm interested cause i'm a 6502 passionist since the early days in 1978 ... but please make a version for Linux ... i don't use windows any more since i pushed out of my working company ... or push the sources at your github ... that i can compile myself ... but it's a very nice project here ... good luck ... greetings form North-Sweden ... Carlo SA2KHG/DG5FW ...

    • @biggertigger
      @biggertigger 2 หลายเดือนก่อน

      All the source for the different runtimes is on GitHub. A good starting point for a Linux port would be the C version of the Portable Runtime that I use to get the VM onto Arduino-style device (like the RP2040 boards). This version of the runtime is machine translated from Hopper to C (easy to update as the runtime evolves in future). To get a client runtime working (to support a first class GUI development environment including editor and debugger) you need very little from the host operating system: - 2x keyboard APIs (IsAvailable and ReadKey) (mouse interface is done as 'special' keyboard events) - 6x screen APIs (Columns, Rows, SetXY(col, row), Print(char)) - one font, foreground and background colours for text cells - access to the file system (Arduino version is close to the usual C / Linux file APIs) - 5x COM port APIs (Connect, Close, IsAvailable, ReadChar, WriteChar) That's it. Getting a blinking text cursor can be dealt with later .. Interested in taking on the project? Here is an invite to the Hopper Discord server: discord.gg/v9p8rDPk

    • @carlo_geiss
      @carlo_geiss 2 หลายเดือนก่อน

      @@biggertigger thanks for your work and the answer ... i will discover these C Area .. ok ...

  • @MissionSuccessGo
    @MissionSuccessGo 4 หลายเดือนก่อน

    Awesome work! I recently got back into microcontrollers and tinkering and hadn't even thought about overclocking. I have a handful of RP2040s and can't wait to give this a shot!

  • @barryc4815
    @barryc4815 5 หลายเดือนก่อน

    Blank video , only sound ?

    • @markhebberd5285
      @markhebberd5285 5 หลายเดือนก่อน

      works for me.... try again?

    • @biggertigger
      @biggertigger 5 หลายเดือนก่อน

      Thanks. That's odd. I've verified from two locations that it plays normally.

  • @NilsKullberg
    @NilsKullberg 5 หลายเดือนก่อน

    Very nice! Would there be ANY reason NOT to develop Hopper code on the Pico from here onwards?

    • @biggertigger
      @biggertigger 5 หลายเดือนก่อน

      It is a good question which can be rephrased "What's Hopper good for?" and it deserves a thoughtful answer. ;-) For the educational purposes for which Arduino was first created 20 years ago, I believe Hopper is a perfect fit and a decent improvement (especially because of the debugger and the garbage collected memory management). For projects that rely on libraries that don't exist in the Hopper environment yet (NumPy and PyTorch come to mind) and for the typical projects that would also disqualify MicroPython (anything that needs RTOS-like performance for example), not so much.

  • @jw0stephens
    @jw0stephens 5 หลายเดือนก่อน

    Any link to code / references

    • @biggertigger
      @biggertigger 5 หลายเดือนก่อน

      I'd forgotten to add links in the description. Fixed. Thanks.

  • @Yeoman35
    @Yeoman35 6 หลายเดือนก่อน

    Pity there is no multi-threading. Looks interesting otherwise.

  • @maxresdefault8235
    @maxresdefault8235 6 หลายเดือนก่อน

    I have blue light filters maxed on my phone and thought the thumbnail was a 4chan post lol

  • @NilsKullberg
    @NilsKullberg 6 หลายเดือนก่อน

    Are you running two instances of Hopper simultaneously in the video or how do you get both the editor and the shell visible at the same time? - I obviously need to watch a few more of the older videos ... ☺

    • @biggertigger
      @biggertigger 6 หลายเดือนก่อน

      You didn't miss anything - this is the first video where I've done this. I'm running two instances of Hopper .NET exe (unfortunately OBS (video capture) doesn't want to show both title bars which would have made it more clear).

  • @NilsKullberg
    @NilsKullberg 6 หลายเดือนก่อน

    Yes, the end results of "tools.cmd" and "sys.cmd" are really valuable for anybody using Hopper. Great!

  • @NilsKullberg
    @NilsKullberg 6 หลายเดือนก่อน

    Very nice to get a "template workflow" for troubleshooting. Thanks!

  • @NilsKullberg
    @NilsKullberg 6 หลายเดือนก่อน

    Understood. Very straight-forward. Thanks!

  • @NilsKullberg
    @NilsKullberg 6 หลายเดือนก่อน

    Yay! Hopper is running both on my computer and on my Pico. Truly amazing how simple and straight-forward Hoppper is. Now I have to get my keyboard to work properly and this will be even more fun ... 😄

  • @NilsKullberg
    @NilsKullberg 6 หลายเดือนก่อน

    Making and uploading of the UF2-file went smooth, but when I compile and upload the Hopper "Blink" program, the console Window just shows "BREAK" in green text and the Pico LED does not blink. I have verified that the Pico is the only enumerated COM port (COM4 actually) and neither the Hopper editor nor the Hopper debugger seem to complain. The only thing I have noticed is that it is HopperPortable, not HopperPortableV2, which is included in the repo. - Any clues to what I'm doing wrong?

    • @NilsKullberg
      @NilsKullberg 6 หลายเดือนก่อน

      Some more clues: I can start the Hopper monitor with command 'hm' and it looks like yours in the video so I'm assuming that the monitor communicates with the Pico. From within the monitor I can load the Blink IHex file onto the Pico ("L BLINK"). No error messages. When i start the BLINK program, it does not blink the LED, but rather prints "-+-+-..." onto the monitor display. - Have I somehow managed to compile the BLINK program for Windows console ... ?

    • @biggertigger
      @biggertigger 6 หลายเดือนก่อน

      Excellent that you got this far. Pico or Pico W? They changed the pin number for the built-in LED from 25 to 32. Try editing it from 32 to 25 in gpio.hs

    • @NilsKullberg
      @NilsKullberg 6 หลายเดือนก่อน

      @@biggertigger Yes, that helped. Big thanks! ... and yes, I have a "standard" Pico without the W.