Porting Bad Apple to the Homebrew CPU!

แชร์
ฝัง
  • เผยแพร่เมื่อ 17 ก.ค. 2024
  • The Bad Apple Demo is one of the most complex demos I’ve implemented on the system with synchronised Audio, Video, SD card and the UART. In this video I discuss many of the technical challenges and my process for solving them.
    0:00 Intro
    0:22 Overview
    0:59 About Bad Apple
    2:29 Graphics Rendering
    8:28 Time & Streaming
    12:06 Lyrics
    14:06 Graphics Compression
    21:33 Sound
    26:38 Outro
    27:04 Bad Apple Port Close-up
    The Links:
    My 4k Bad Apple Recording: • Bad Apple on the Homeb...
    Bad Apple Explained: History and Analysis: • Bad Apple Explained: H...
    "Bad Apple on everything" Playlist: • Bad apple on everything
    Bad Apple Resources: archive.org/details/bad-apple...
    The source Midi: • Touhou Bad Apple!! - M...
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 147

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

    Join us on Discord: discord.gg/jmf6M3z7XS (Over 1024 members!)
    Follow me on Twitter: twitter.com/WeirdBoyJim
    Support the channel on Patreon: www.patreon.com/JamesSharman

  • @AJB2K3
    @AJB2K3 12 วันที่ผ่านมา +41

    CAT Compression - If it fits, I sits!

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +9

      It fit. Just!

  • @garbagescowcaptain
    @garbagescowcaptain หลายเดือนก่อน +22

    Brilliant work. The 80x60 version is impressive in itself, but the deep-dive into extending the resolution is fascinating.

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +5

      Glad you liked it! For me the challenge is what makes it interesting, nice to get something that drives the system!

  • @schrodingerscat1863
    @schrodingerscat1863 12 วันที่ผ่านมา +23

    This is a great examination of many of the old tricks used to fake high res graphics on old limited systems. Really takes me back.

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +6

      Glad you enjoyed it! There is going to be a lot more "old graphics tricks" in the future.

    • @schrodingerscat1863
      @schrodingerscat1863 12 วันที่ผ่านมา +2

      @@weirdboyjim Great news, I used to love the challenge of coming up with tricks to get around the limitations of the old 8 and 16 bit machines.

  • @JensAndree
    @JensAndree 12 วันที่ผ่านมา +18

    Old demo coder here just saying this is awesome and it brought me back!

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +1

      Glad to be of service!

  • @OscarSommerbo
    @OscarSommerbo 12 วันที่ผ่านมา +11

    Prioritizing audio over visual playback makes prefect sense, as humans are way more forgiving of visual stutter/discrepancies than of audio issues. As well as the variability of the amount of processing needed, as you mentioned.

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +2

      Glad you think so!

  • @timothyp8947
    @timothyp8947 11 วันที่ผ่านมา +2

    It’s impressive to see your home brew running such an easy to recognise demo… I daresay you feel rather chuffed at just how much you can achieve with a machine you’ve created from scratch 😊

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

      Thanks Timothy! I was indeed quite pleased with this, especially getting so many different parts of the system working together.

  • @rauljvila
    @rauljvila 12 วันที่ผ่านมา +5

    It is great to see the computer being used just for the sake of doing something. It shows that it really is a whole working system. Congratulations!
    Great explanations, as always. Thanks!

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      Absolutely! It was rewarding to make!

  • @calculus7
    @calculus7 12 วันที่ผ่านมา +5

    Extremely impressive, James. Seeing how you solve technical / programming challenges has always been the most interesting content on your channel for me, given your expertise. Thanks for sharing your incredible knowledge and skills with us!

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      It's great that people are finding it interesting!

  • @MaxintRD
    @MaxintRD 12 วันที่ผ่านมา +3

    Saw that amazing demo first. Now time to see all of the backgrounds...
    Edit: impressive work! Thank you for your clear explanations and for sharing your work. Very inspirational!

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      Good to hear you found it interesting!

  • @peter.stimpel
    @peter.stimpel หลายเดือนก่อน +8

    Can it run Doom, can it play Bad Apple .... I love it!

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

      Of course this time it's Yes! Glad you like it!

  • @lasersimonjohnson
    @lasersimonjohnson 12 วันที่ผ่านมา +5

    Nice work James.
    Very clever implementaion. !

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      Thank you! Cheers!

  • @VK2GPU
    @VK2GPU 12 วันที่ผ่านมา +2

    Ahhhhh finally got to Bad Apple :D Gotta say it's been great watching this long term project grow over time :)

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +1

      Thanks! I appreciate your support Rae!

  • @NuttySwiss
    @NuttySwiss 12 วันที่ผ่านมา +3

    Love the work you do. Look forward to every episode. ❤

    • @twobob
      @twobob 12 วันที่ผ่านมา

      same

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      Thanks! I hope I don't disappoint!

  • @Sovvyy
    @Sovvyy 10 วันที่ผ่านมา

    Facinating and humbling. Still thoroughly enjoying these vidoes! Great stuff. 👍

    • @weirdboyjim
      @weirdboyjim  10 วันที่ผ่านมา +1

      Glad to hear it!

  • @KludgesfromKevinsCave-vb6bk
    @KludgesfromKevinsCave-vb6bk 12 วันที่ผ่านมา +3

    Magnificent!
    If you do plan to do more music on the synth, it might actually be good to add a channel that's a white notse generator. You can do a much more convincing hat or snare by passing white noise through an ADSR (the snare has something like a tom on a second channel, perhaps).

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      A lot of people have suggested that. I might have a play at some point.

  • @al_lazy3519
    @al_lazy3519 12 วันที่ผ่านมา

    That's an impressive result on your demo!

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      Glad you liked it!

  • @ericfrazer4736
    @ericfrazer4736 11 วันที่ผ่านมา +1

    very cool, thank you!

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

      Glad you liked it!

  • @leyasep5919
    @leyasep5919 12 วันที่ผ่านมา +2

    That's so impressive !

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +1

      Glad you enjoyed it!

    • @leyasep5919
      @leyasep5919 12 วันที่ผ่านมา

      @@weirdboyjim audio and video compression are some of my "hobbies".
      Another is CPU design.
      You aced them all 🙂

  • @Fifty1Ford
    @Fifty1Ford 12 วันที่ผ่านมา +2

    Awesome job!
    Very crisp edges and great job keeping up with the transitions!
    I see the 4Mb file size, maybe I missed it but what did you end up with for a compression rate compared to the uncompressed down sampled source frame images?
    Have you thought of using your UART as an audio output?
    Drop the serial and hook the output to a speaker with a resistor and capacitor to limit the current and smooth it a little?
    Since you have a 8 byte output buffer on that already you could output 1 bit audio without any additional hardware and that buffer might make the code not too bad.
    If you just left it at the 115,200 you'd need to pump out 14,400 bytes a second, or 240 bytes a frame. I don't know if your SD card transfer rate and free CPU time on the Video decode would allow that without reducing the framerate, but I'd bet 115 KHz 1 bit audio would sound pretty good!
    Obviously if you reduce the output rate of your UART you could drastically reduce the bitrate of the audio. I wonder what the minimum acceptable 1 bit audio quality would be?
    Think you could squeeze that out?
    Thanks for putting this out there!
    There is not enough content explaining how to actually DO one of these demos with specifics.
    I know this video would have been a HUGE help and time saver when starting work on my own Bad Apple! demo.
    It would be neat if you took some time to get into the guts of your encoder for the video and how you sliced and diced the MIDI.
    Love this content!

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +2

      The compression was around 11:1, the compression as as much about speeding the decompression up as well. I generally update more of the frame with the compressed data than I could do with the a raw copy.

    • @Fifty1Ford
      @Fifty1Ford 12 วันที่ผ่านมา +2

      @@weirdboyjim That trade-off is harsh. When I started looking at doing this with the 6502 I was planning on just using a preexisting decompression library but all that I looked at were mostly meant to be tape or floppy loaders and were focused on max compression, and therefore really slow for what I needed. Obviously more modern routines are too heavy for a simple processor. Add in the slow nature of a bit banged SD card read on a VIA and now you also have the trade off of read speed to take into account.
      Is it faster to decompress a little more or to read another byte?
      Will adding that 1 more branch on the decoder use too many cycles to offset the bytes it saves on the encode? etc.
      I like how you mention being 'good enough' for the demo. You can really keep going for quite a ways.

  • @jean-philippegrenier120
    @jean-philippegrenier120 12 วันที่ผ่านมา +2

    absolutely insane achievement. 💪!!!!!

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      Glad you liked it!

  • @muccasan9511
    @muccasan9511 12 วันที่ผ่านมา +2

    awesome!!😍

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +1

      Thanks! 😄

  • @AndrewShevchuk
    @AndrewShevchuk 12 วันที่ผ่านมา

    An incredible amount of work and time.

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      More than I want to admit! ;-)

  • @DamianReloaded
    @DamianReloaded 12 วันที่ผ่านมา

    It turned out incredibly well. Kudos! It´s right there with the demos for the best performing 8bit computers I've seen. I wonder if rasterizing vector graphics would compress it even further. There is a version made with a fourier series XD

    • @weirdboyjim
      @weirdboyjim  11 วันที่ผ่านมา +1

      Thanks Damian! If you had a decent bitmap display vector graphics would work well for much of it, would be a bit more complex to deal with the blurry bits and the flames though. Decompression would be a bit more cpu intensive than I'd want to do on this device though.

  • @akkudakkupl
    @akkudakkupl 12 วันที่ผ่านมา +3

    James I just had an idea - you quite possibly can play samples on your sound hardware through the volume register. Just send singed integer formatted samples into the volume register!

    • @simontillson482
      @simontillson482 12 วันที่ผ่านมา +2

      Yeah, I was thinking the same. Would need to lock the frequency output into a fixed high state though. And the amount of streaming audio data would be way higher - would need to be at least 16kB/sec, continuous, rather than a few bytes per frame.

    • @akkudakkupl
      @akkudakkupl 12 วันที่ผ่านมา +2

      @@simontillson482 could go as low as 4kHz sampling rate and still get OK speech, 8kHz would be fine for low fidelity sampled instruments. True, it would take a lot of bit banging. Some DMA controller would speed up a lot of IO stuff here. I don't recall the memory access method of JAM-1, but if it only accesses memory at rising edges for example, then that leaves the whole other clock phase for DMA, and that could do sample playback autonomously, just fill up buffers with the CPU, set up memory addresses for the DMA and let it rip.

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +2

      Indeed! I've actually done a little bit of experimentation with that, I'll make a video at some point. Not practical as an aide here though as it needs constant GPU supervision.

  • @IvanEngler
    @IvanEngler 10 วันที่ผ่านมา

    impressive!

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

      Thanks Ivan!

  • @AK-vx4dy
    @AK-vx4dy 12 วันที่ผ่านมา +1

    Fascinating journey 😁 when I was young I fall in a rabitt hole of creating fonts or electronic components symbols on millimeter paper 8x8 matrix (for ZX Spectrum)... for a moment I wondered why not create all possibilities but I already know binary system well and realised it be 2^64...😅

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      Lol! I did a fair bit of of the graph paper design work back then as well!

  • @twobob
    @twobob 12 วันที่ผ่านมา +1

    This is of course amazing as-is. as ever. Good problem solving. Feels so ridiculously modern with a trace of retro. Hats doffed. tipped and whatever else one does respectfully with hats.
    And, for once. I am an expert (eh as much as anyone is). and if this makes it into the open... will be happy to fiddle very slightly with some of the values in that demo to give my take on OCD concert-pitchish perfection and percussive filth ;)

    • @twobob
      @twobob 12 วันที่ผ่านมา

      so good i watched it thrice

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +1

      Thanks twobob! Like I said in the video, I know the audio is the weakest bit. Part of that is just down to my musical ear being rubbish, hard for me to chart improvements.

  • @0xABADCAFE
    @0xABADCAFE 12 วันที่ผ่านมา

    I've not even watched it yet and already hit the like button.

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      Hoping you didn't unlike it after.

  • @IgorPomaranskiy
    @IgorPomaranskiy 12 วันที่ผ่านมา +1

    Mind. Blowing. %)

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      Thanks Igor!

  • @ecosta
    @ecosta 12 วันที่ผ่านมา

    So cool! I wonder if you can stream sprite changes as well. Could create some interesting opportunities.

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      You could! You have balance the total memory bandwidth though, you only have so much to share between everything.

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

    Nice little project for the CPU! I’d recommend looking into the Heatshrink compression library for future projects, if you haven’t already. I can verify it’s suitable for realtime video streaming on microcontrollers.

    • @weirdboyjim
      @weirdboyjim  10 วันที่ผ่านมา +1

      I had a quick look at that library, I'll look at it more in the future. It wouldn't be suitable for the decompression here though which extremely custom and very much tuned to the data and cpu.

    • @jimmy21584
      @jimmy21584 10 วันที่ผ่านมา

      @@weirdboyjim yes, for something that was also storage space or bandwidth constrained it might be useful. I use it for fitting video frames into single UDP packets. Combined with the same sort of frame delta and RLE you are doing, it works really well.

  • @michaelheuss6502
    @michaelheuss6502 12 วันที่ผ่านมา +1

    Great work! I was thinking about the problem of being stuck with the vertical blanking period for writes a while back and the only workaround I could come up with would be a 30Hz mode, where, during one frame, you write everything out to a 1MB frame buffer while you display the frame, and on the second frame, you read back from the frame buffer, freeing up your primary graphics memory during the entire frame for writes. But that increases the complexity of the video hardware so much that I just don't know if it would be worth the engineering on a home project.
    Thanks for your videos in general, as I really enjoy thinking about these sorts of issues.

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      It's worth thinking about the problem, I'll explore some different approaches in future builds.

  • @drlazy1
    @drlazy1 10 วันที่ผ่านมา

    Interesting.
    To be honest your audio setup is decent given the constraints. I really like the retro square wave sound it has. What's missing is a bit of polish on the analogue side of things. In particular you need a low pass filter somewhere after the mixer to get rid of aliasing and any other unwanted noise. You'll probably have to experiment to find a good cut off point.

    • @weirdboyjim
      @weirdboyjim  10 วันที่ผ่านมา

      Thanks for the feedback, I'll look into the filter. The one thing in the audio circuit I didn't realize when sketched it out is the high frequency components you get on a volume adjust. Might have been better to latch in the 4 bits of volume at the end of the a "cycle".

  • @danmerillat
    @danmerillat 10 วันที่ผ่านมา

    It would be fascinating to see a couple of the frame transitions slowed down significantly so you can see the block-by-block updates happening. Taking the existing encoding and doing one operation every few frames?

  • @janhofmann3499
    @janhofmann3499 10 วันที่ผ่านมา

    Great work and explanation as always! One question: how many LOC do the sources of the player binary have?

    • @weirdboyjim
      @weirdboyjim  10 วันที่ผ่านมา

      Thanks. I use a lot of generic library code, but dedicated lines written for this: The de-compressor for the video stream is in it's own files and totals 195 lines. The main file is just under 300 lines of assembler.

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

    Hell yeah

  • @Packbat
    @Packbat 12 วันที่ผ่านมา

    Stunning work, yet again - great job!
    And sympathies on the audio struggles - I think your approach made a lot of sense given the limitations you had, though. And you're actually wrong when you say none of your percussion sounds are going to impress anyone - the bass drum you made at the end is quite good, I like that a lot.
    Here on out is unsolicited-suggestion-ville, so take from it what you will: if it were me, I'd like to add a noise oscillator - either replacing one of the existing square-wave channels or augmenting one or more channels with that functionality. There's ways to generate analog noise directly in hardware - transistor noise is one I've heard of and seen from folks like Moritz Klein - but there's also a very famous sound chip that generates 1-bit noise: the General Instrument AY-3-8912 used in (for example) the Amstrad CPC computers. Basically, it has a hardware random number generator (I think it uses a linear-feedback shift register, like the NES APU does) and instead of switching between 1 and 0 at the frequency you set, it switches to the next random bit value at the frequency you select. That should be enough to generate some fairly convincing white-noise-like sounds for your hi-hats and cymbals, and as a bonus you can get some nice rumbly blasts for explosions and such in your games.

    • @twobob
      @twobob 12 วันที่ผ่านมา +1

      yeah, I did think much of this. but honestly he made it work despite all that.

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +2

      Thanks for the kind words! I am curious about the way noise was used by some earlier synth systems but my knowledge about sound lags far behind my graphics skill. That said generating a random bit sequence in hardware is an interesting challenge, I might have a play at some point.

    • @Packbat
      @Packbat 12 วันที่ผ่านมา

      @@weirdboyjim Sound is definitely a massive rabbithole, for sure - I grew up playing the piano, spent years watching music theory and DIY synthesizer videos on TH-cam, and I've written dozens of completed tracks and hundreds of fragments in the fantasy console PICO-8, and I still feel like I'm missing a lot of knowledge.
      The way I think of noise in music composition for 8-bit machines kinda comes from a rock/pop theory perspective: a classic drum kit has low percussion (the kick), mid percussion (toms and snares), and high percussion (cymbals and hi-hats), and you want to be able to make sounds to fill all those roles. Having a pitched oscillator - like your square waves - that drops quickly in pitch - like you did with your bass drum - is a good way to make a low or mid percussion, the kick/bass drum and tom roles, but if you try to start your pitch higher, you get a kind of laser-zappy noise. Which is cool, but it's not a hi-hat. A short burst of noise, on the other hand, *can* sound like a snare or hi-hat - it gives you the high percussion sounds you struggled with. That's why it shows up in analog synthesizers, in classic consoles (NES, ZX Spectrum, Commodore 64, etc.), and even in modern synths.

    • @Packbat
      @Packbat 12 วันที่ผ่านมา

      ...come to think of it, I think the ZX Spectrum *also* has an AY-3-8912 chip in it. Is there a ZX Spectrum music tracker you can play with? I feel like there must be.

    • @twobob
      @twobob 12 วันที่ผ่านมา +1

      @@Packbat noise is an entire subfield. since white noise + filter stack = eh, everything, given enough skill.
      If we are going to say things that "might be nice" mine would be use the "you get a kind of laser-zappy noise" above at the start of the kicks just like the OP said here. Again totally nailed some of the less obvious, easy oversights to make, in reproducing kicks.
      An oscillator that can drop in pitch given a period and a range really can be invaluable,
      if we are adding cools things... 74HC164 as an LFSR with a 74HC86 for FB? maybe that would sound good? surely you have that just lying around..mangle the clock division.. surely some noise in that. or some other similar "nod to noise" without succumbing to an actual wave/synth solution. I'm biased. I like sounds

  • @connorwood95
    @connorwood95 12 วันที่ผ่านมา

    I'd definitely be curious to see what could be done if the pallet was played with as part of the video stream, beyond the colour inversion. My first thought would be to chop the video up into sections with a dedicated pallet each, for higher resolution, though there's probably way further you can go than even that.
    This is a seriously impressive demo, I love it

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      Glad you like it! Well the 2x2 grid works better in some segments than others. I did think of tweaking the entry used for 50% to better match where I was using it.

  • @RegisMichelLeclerc
    @RegisMichelLeclerc 12 วันที่ผ่านมา +1

    Back in the day (1992), we used to play with VGA on a 80286 PC and the recently arrived SoundBlaster (that costed a fortune). We were using the 640x480 16 colours mode. You mention 60fps, we were doing half of that, but we were "hiding" the updates: in the 256kB of a standard VGA, there is enough space to "draw" the next image offscreen and reveal it with a simple "out" (I think it was to 0x3c4). Also, in that mode, we only used the 16 grays and the data was pre-rendered (we used PCX as a base standard, minus the header) to only recalculate it into the chroma data (and offset to have more tints in the light shades than in the dark), all that with a bunch of SHLs. Maybe you don't really need to go 60fps?
    For the sound, as you already (kinda) went to MIDI instruments, why not going to an OPL4 chip (or did I miss an episode?) such as the YM2515 and simply upload the instruments to the chip, and leave the sound problem for later?

    • @twobob
      @twobob 12 วันที่ผ่านมา

      opl series. 1994.
      6502 series 1975...

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +1

      This project is very much about doing things from scratch so it would have felt like cheating. I'll do some more advanced Audio in a future build.

    • @RegisMichelLeclerc
      @RegisMichelLeclerc 12 วันที่ผ่านมา

      @@twobob No, it's 6502 series 1975, OPL series 1984 (10 years, not 20): The YM3526, introduced in 1984, was the first in the OPL family, providing a nine channel, two operator synthesizer.

    • @RegisMichelLeclerc
      @RegisMichelLeclerc 12 วันที่ผ่านมา

      @@weirdboyjim I know it sounds cheating if you make it permanent. My point was to start thinking of goals to achieve with that scratch build in the future, but already have an API (or a subset of it) and a comparison point. It's as much cheating as Android being a copy of Sun's JVM: the implementation will be yours, not Yamaha's.
      Also... Do you really need 60fps?

  • @SmashCatRandom
    @SmashCatRandom 12 วันที่ผ่านมา

    That was really interesting, thanks James. I do a lot of retro-gaming conversions and emulation etc, and these kinds of optimisations are always interesting to me! (currently trying to convert Missile Command to my tile+sprite based platform on the old 8-bit Arduino, with composite output, using a similar idea of tiles with partial line segments) Out of interest, did you consider a frame-direction byte, so the data is rendered to the buffer either horizontally or vertically? Also a byte at the start of the frame to choose the tile-set to use, which could be more optimal for the frame? Your audio section reminded me of Tim Follin's ZX Spectrum music - that dude was a master at getting amazing sound from it's little beeper :)

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      When building this demo I had a number of idea of small hardware tweaks that would improve it but I was keen to do the best demo with the hardware I've had rather than tweak the device.

    • @SmashCatRandom
      @SmashCatRandom 12 วันที่ผ่านมา

      @@weirdboyjim Ah! I didn't realise you cannot switch tile sets in the software. The frame rendering direction would be purely software. As you say though, it's done and looking good anyway :)

  • @LilMissMurder3409
    @LilMissMurder3409 10 วันที่ผ่านมา

    The world is full of unsung genius.

    • @weirdboyjim
      @weirdboyjim  8 วันที่ผ่านมา +1

      Very kind!

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

      @@weirdboyjim Not at all! It takes one to know one XD

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

    What year do you think this computer could have been built with equivalents of that time. And would it be an impressive computer of the time? Very impressive project from start to finish!

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

      Glad you are enjoying the series. That's a really tough question, the majority of the circuit could have been built in the late 60's. The big "liberty" I take is with memory devices, a 64KB of sram would have cost you a kings ransom.

  • @polarbub
    @polarbub 11 วันที่ผ่านมา +1

    Could you have somehow programmatically determined the best tiles for video? Maybe split the each frame into tiles and then find the closest ones and combine them? Also could you have changed the pallet frame to frame to be able to have the best tiles for that frame?

    • @weirdboyjim
      @weirdboyjim  11 วันที่ผ่านมา +1

      In theory you could have determined an optimal set but that would have been a sizeable job compared to the time I wanted to devote to this, and I don't think the improvement would have been significant. I did investigate some dynamic tile modification, the problem with that updating tiledata consumes the same memory bandwidth as updating the tilemap which was already constrained.

  • @NuttySwiss
    @NuttySwiss 12 วันที่ผ่านมา

    It sounds like you need a hw random 8-bit number generator you can hook up to the audio circuit to help with noise style outputs?

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      It is interesting the way old synth chips used the noise channel.

    • @NuttySwiss
      @NuttySwiss 12 วันที่ผ่านมา +1

      @@weirdboyjim yeah. The C64 GEOS copy protection was very interesting in how it used the SID chip noise to decode itself. 😎

    • @fintux
      @fintux 12 วันที่ผ่านมา

      NES created noise without an RNG, by the way. I don't know the exact details, but I think there was some prewritten data that it would loop through with some feedback mechanism, so that you could also then somehow alter the tune.

  • @drivers99
    @drivers99 12 วันที่ผ่านมา +2

    The different parts of the song ended up not being in tune with each other in terms of how they’re transposed. Should be fixable? I mean like the long low notes (bass) that play alongside the melody.

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      Is that in the source midi data? My musical ear is not good.

    • @drivers99
      @drivers99 12 วันที่ผ่านมา

      @@weirdboyjim yeah it should be fixable in the midi data. I cross posted in discord. Would it be possible to play the same scale with each instrument, then we should be able to figure out how to transpose the midi data

    • @inactivated0
      @inactivated0 12 วันที่ผ่านมา

      @@weirdboyjim no, the midi is fine. the instruments you created are out of tune

  • @lasskinn474
    @lasskinn474 12 วันที่ผ่านมา

    the link on the bad apple vid thats supposed be to this vide is broken (on its description)

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +1

      Not sure what happened, that should be fixed now.

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

    To quote a Monty Python script.... MY BRAIN HURTS!
    When you were building the audio device, I always wondered why you did not incorporate timers to generate various tones, paired with digital volume control chips? Sure, they would be square waves, but with volume modulation, you could make a nice sounding output. Add another timer to the actual volume control chips and it could modulate without the need of heavy CPU work. Sure, this would have two timers and half a volume chip per channel, but it would not be very complex to make. I understand not designing a computer to run demos, but it would certainly make games much more interesting.

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

      If I'm understanding your proposal correctly I think that would be about 4-5 extra chips per channel. Something I find is that every circuit, there is always a way to add functionality and make it better and wherever I draw the line someone else would have done it differently.

    • @Tomasu82
      @Tomasu82 12 วันที่ผ่านมา

      Yeah, though I think its not just limited to everyone drawing the line at a different place. Its also people not having tried it first before commenting :D its one thing to make an off-hand suggestion, but its another to actually try implementing it and realizing what a pain in the butt it might end up being.

  • @Tomasu82
    @Tomasu82 12 วันที่ผ่านมา

    Man, if I ever get this far along in my diy computer project I want to try a "gpu" with sprites that support rotation, scaling and skew. back in the day IIRC, I saw some code that did all three operations at the same time (but line by line) with some "simple" matrix math (I hope I'm not mis-remembering this.. it was 20+ years ago in a little library called allegro 3) and I imagine it could be done "reasonably well" in hardware with fixed point math and a lookup table. Hmm. But then you'd want the gpu to be able to do the math to offload the work from the cpu. so do you actually support math, or just limit the features to some stuff that can be pre-calculated? feh. The imagination runs wild :D

    • @angeldude101
      @angeldude101 12 วันที่ผ่านมา

      I'm pretty sure the Gameboy Advance had exactly that, with the option to double the size of a sprite in the buffer to include a 2x2 matrix.

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา

      The trick is to find the right level to put it into hardware. To implement the scaling and rotation you can boil it all down to a bunch of adds from registers.

  • @PleegWat
    @PleegWat 12 วันที่ผ่านมา

    Do you really need to decode the entire frame before vblank ends? Don't you just need to stay ahead of the current scan line?

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

      The video circuit is bandwidth limited, It doesn't support reading and writing at the same time. Priority goes to the cpu so if I write outside of blanking it will momentarily corrupt the screen. See my vga series for more information.

  • @rrjmdPA
    @rrjmdPA 12 วันที่ผ่านมา

    hope you decide that you really do need to improve that audio. I've watched computer development over 76 years and don't really remember that rough of audio in any computer I've had. We all have our own definition of "adequate" I guess. Still, would be nice if the sound was less grating - after all, we understand tech better today and you do have precident (ie we didn't have SD cards back then)

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +1

      I'll be doing a different audio circuit in the future.

  • @Thorsummoner0
    @Thorsummoner0 10 วันที่ผ่านมา

    Have you had any will, and any success , collaborating with other people on either the software or hardware that interests you?

    • @weirdboyjim
      @weirdboyjim  10 วันที่ผ่านมา

      Largely speaking this project is "I'm doing my own thing". I have been talking to an artists friend about helping me out with some pixel art for games though.

  • @retroboi128thegamedev
    @retroboi128thegamedev 11 วันที่ผ่านมา +1

    Touhou mentioned

  • @NozomuYume
    @NozomuYume 10 วันที่ผ่านมา

    "Doujin Circle" isn't a proper name, it's a description of the group. "Doujin" means "same person" meaning "self-published". "Circle" just means "group". In the case of music, you'd translate it as "Indie band". "Alstroemeria Records" is thus the name of the group rather than a record label like the name would suggest.

    • @weirdboyjim
      @weirdboyjim  10 วันที่ผ่านมา

      Ahh, thanks for letting me know. It's difficult getting everything exactly right when it's relates to another language.

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

    why not start a new series, implementing CPU into an ASIC, and sending it to Tiny Tapeout

    • @weirdboyjim
      @weirdboyjim  11 วันที่ผ่านมา +1

      So many ideas! So little time!

  • @AndyGoth111
    @AndyGoth111 12 วันที่ผ่านมา

    >Hopefully you've had a chance to watch the Bad Apple demo
    ... Which posted one minute after this video, haha

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +1

      Deliberate to have the demo as the most recent one in the list.

  • @mirabilis
    @mirabilis 10 วันที่ผ่านมา

    The graphics is putting the audio to shame.

    • @weirdboyjim
      @weirdboyjim  10 วันที่ผ่านมา +1

      Well I've always been a graphics specialist.

  • @bzuidgeest
    @bzuidgeest 12 วันที่ผ่านมา

    No accounting for taste, in general I find this demo, weird, but then again that is my opinion of most Japanese (anime) stuff. I do however appreciate the technical merits of you getting it to work on your system. That is a real accomplishment. Hopefully your next choice will sound and look better. To set the bar, the scrolling parrot demo looked better. Your 3d demo looked better.

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

      Well, sorry it's not what you wanted.

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

      @@weirdboyjim don't be, I just find your other demos more impressive and bad apple overrated. As said, it was technically still very impressive. I look forward to seeing what you do next.

  • @naikrovek
    @naikrovek 12 วันที่ผ่านมา

    why is it always Bad Apple? Bad Apple here, Bad Apple, there, Bad Apple EVERYWHERE. God, I hate Anime.

    • @drivers99
      @drivers99 12 วันที่ผ่านมา +1

      It’s a video game not anime

    • @drivers99
      @drivers99 12 วันที่ผ่านมา

      As for “why”? The 1-bit friendly black and white animation lends itself to being ported to all kinds of display technologies, and it’s highly compressible.

    • @thealliedhacker
      @thealliedhacker 12 วันที่ผ่านมา +1

      I really hope we get a lot more Bad Apple, if for no other reason than to piss off this ignorant asshole.

    • @angeldude101
      @angeldude101 12 วันที่ผ่านมา

      The song is catchy; the art style lends itself very well to being ported to unorthodox or limited systems; and Zun takes a radical stance regarding IP to not only allow others to use his work, but encourage it.
      Considering the large overlap between people who watch anime and play anime-inspired games, and people in technical fields, ya. There _are_ a lot of anime references in tech spaces. Bad Apple is just one of them. Another is the phenomenon of "programmer socks".

    • @weirdboyjim
      @weirdboyjim  12 วันที่ผ่านมา +1

      Fortunately you'll find I have many videos that do not contain any apples or anime.