Let's Make EdVenture #3: Fun with Character Sets -- Coding a Roguelike in Atari 8-bit Assembly

แชร์
ฝัง
  • เผยแพร่เมื่อ 18 ต.ค. 2024

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

  • @brandonphilander661
    @brandonphilander661 2 ปีที่แล้ว +14

    Keep going man, this tutorial series is great.

  • @trannusaran6164
    @trannusaran6164 ปีที่แล้ว +3

    I'm trying to make my first game on an 800 I picked up, and this series has already been invaluable

  • @edbrown1166
    @edbrown1166 2 ปีที่แล้ว +3

    One reason for copying the character set data from ROM is to allow you to use existing characters/numbers for things like "Score:00100" and to use other characters for your custom symbols/font. Doing it this way means you don't need to switch between character sets. But, if you plan to customise the entire character set then there's no need to do the initial copy.
    Really enjoying the vids so far! It's been EDzactly what I've been looking for. I've been following along using the WUSDN editor - so glad to have found it - it's been making my journey back to my childhood much more enjoyable.
    Keep the videos coming - there's nothing like a good EDucation :)

    • @MissionEdPossible
      @MissionEdPossible  ปีที่แล้ว +1

      Love it! Yeah, I will be moving back to copying eventually, since I need to be able to "cherry pick" certain characters, since I'll have more than the charset will hold.

  • @fernwood
    @fernwood ปีที่แล้ว +2

    So yesterday I fell asleep listening to this playlist and dreamt about assembly language all night!

  • @ecernosoft3096
    @ecernosoft3096 2 ปีที่แล้ว +2

    Dude, you are AWESOME. You've earned your 580th sub!

    • @MissionEdPossible
      @MissionEdPossible  2 ปีที่แล้ว +1

      Thanks so much! Very much appreciated!

    • @ecernosoft3096
      @ecernosoft3096 ปีที่แล้ว

      @@MissionEdPossible You're too cool, it was necessary for me to do so, even though I am a seasoned 8bit coder!
      By the way, in ANTIC 2, you can use the P/M graphics at 4x wide (All sprites 4x wide) and fill the screen, then you can get a 3rd (Even 4th) color by turning on/off playermissle pixels! I'm terrible at explaining it but it's useful when you use ANTIC 2 or 3. Also, ANTIC 3 is 10 lines high instead of 8 like ANTIC 2.

  • @fuzzynine
    @fuzzynine 2 ปีที่แล้ว +2

    This is extremely awesome. Thank you so much for this great series. I'm totally excited about the coming videos.

  • @SyntheToonz
    @SyntheToonz 2 ปีที่แล้ว +5

    Another thing you can do to put graphics assets in the proper locations without doing the math is use .align size. Since a character set requires 1K boundary for mode 2 or mode 4/5, you use .align $0400, then declare the charset label. MADS puts charset at the next address aligned to a 1K boundary.
    Then after charset is declared, just put the .bytes defining the character set and MADS assembles the character set images in the memory for the character set. No copying necessary.

    • @MissionEdPossible
      @MissionEdPossible  2 ปีที่แล้ว +1

      Yep, I knew about the alignment thing, but I figured I'd do it the hard way. :)

    • @chitlitlah
      @chitlitlah 2 ปีที่แล้ว

      Or in an assembler like ca65, you can declare a new segment that's aligned to $0400. That way it doesn't have to pad the file with a bunch of unused bytes to get to that alignment and the linker can put that segment wherever it's convenient.

    • @SyntheToonz
      @SyntheToonz 2 ปีที่แล้ว

      @@chitlitlah .align does not pad/fill. It will create a load file segment.

    • @chitlitlah
      @chitlitlah 2 ปีที่แล้ว

      @@SyntheToonz Maybe that depends on the assembler and the align parameter. I was just reading about it padding the data segment to align data. It makes sense that it would create a new segment for something that needs to be aligned to a page boundary or larger, but it would be ridiculous to make a segment for something that needs to be aligned to a double byte to a few bytes.

    • @SyntheToonz
      @SyntheToonz 2 ปีที่แล้ว

      @@chitlitlah i figure if the assembler discussed can also cross assemble for the c64, then for that target it would have to pad. Otherwise any decent assembler that knows the Ataris will make load segments.

  • @IntoTheVerticalBlank
    @IntoTheVerticalBlank 2 ปีที่แล้ว +3

    More magic!

  • @fatmanslim6591
    @fatmanslim6591 2 ปีที่แล้ว +1

    Another great episode, easy to follow, keep up the good work 😀

  • @BellaLugoshi
    @BellaLugoshi 2 ปีที่แล้ว +3

    спасибо, очень полезно.

  • @renecura
    @renecura 2 ปีที่แล้ว +2

    Hi, i'm working on Linux and trying to do this using Stella as emulator, but its gime me an error when trying to execute the .obx file. You know if some extra configuration is needed? Ty!

    • @MissionEdPossible
      @MissionEdPossible  2 ปีที่แล้ว +1

      Well, first off, Stella is an Atari 2600/VCS emulator, which has a much different architecture. You're going to want an Atari 8-bit emulator. For unix based systems, you'll probably want to try out atari800. Good luck!

  • @Scuttle-vs4yn
    @Scuttle-vs4yn 7 หลายเดือนก่อน +1

    I am converting this to the Atari 5200 to learn what you are explaining. Is copying the Character Set to RAM that important? I was going to just set CHBASE to a location on the ROM cartridge and read the Character Set directly from ROM. Or is this an ATARI 5200 specific capability?

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

      It's not important if you're just replacing the characters - If you're going to use the existing ROM character set, there's no need to mess with it at all.

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

      Oh, and if you get it working, definitely share!

  • @SyntheToonz
    @SyntheToonz 2 ปีที่แล้ว +2

    If this:
    mva chars,x charset,x
    results in this:
    lda chars,x
    sta charset,x
    lda chars+1,x
    sta charset+1,x
    (copying two characters)
    Then this:
    loop
    mva chars,x charset,x
    inx
    cpx #16
    bne loop
    Should increment X twice.
    loop
    mva chars,x charset,x
    inx
    inx
    cpx #16
    bne loop
    (Same situation for copying bytes to screen memory using Y register.)

    • @MissionEdPossible
      @MissionEdPossible  2 ปีที่แล้ว

      So, mwa is the one to copy a word (two characters), mva copies a byte. I *think* I'm using it right -- if not, definitely let me know :)

    • @SyntheToonz
      @SyntheToonz 2 ปีที่แล้ว +1

      @@MissionEdPossible oh. I thought it was the same as the one used at the start for SDLSTL/H. Sooo, never mind.

  • @brianwild4640
    @brianwild4640 2 ปีที่แล้ว +2

    Instead of loading the char set just origin the data to $3C00