Retro MS-DOS Coding - Recreating the Iconic Award BIOS Screen

Поделиться
HTML-код
  • Опубликовано: 7 янв 2025

Комментарии •

  • @fllthdcrb
    @fllthdcrb День назад +290

    8:40 Whoa! That's my old Web site (from back when my ISP would host them itself)! I never thought I'd ever find out about someone actually reading it (albeit through the Wayback Machine), but I'm glad you found the information useful. Just out of curiosity, where did you find the link to it?

    • @colinofay7237
      @colinofay7237 День назад +24

      What are the chances heh

    • @ncot_tech
      @ncot_tech  День назад +51

      Ha that's cool. I think I just typed something like "award bios format" or something into Google. And yeah it was useful, so thanks!

    • @sirflimflam
      @sirflimflam День назад +39

      It's trippy when that happens. A few years ago I stumbled across a youtube video that discussed some old retro sega genesis rom hacking and it featured an little bit on an antiquated graphical editor I'd made back in 2001 for editing the uncompressed/compressed art inside genesis roms. Lol.

    • @R.B.
      @R.B. День назад

      Once upon a time on /., I posted a Sidewinder gamepad mapping I made for UltraHLE which gave you three different ways to configure your gamepad which would make it feel more like an N64 controller based on how most N64 games were made. Years later I found a site which was actively pushing it as the defacto way to emulate that experience as closely as possible and it made me chuckle. It was something I whipped together quickly just so that I had some solution I could use. I have no idea how many people really used it but it was strange to see that it had spread beyond my original post.

    • @jimmy21584
      @jimmy21584 День назад +19

      I found it weird when RUclips showed me recent reviews of obscure PlayStation games I made in the year 2000.

  • @OBrasilo
    @OBrasilo День назад +130

    Hello, 86Box lead developer here - both Award and AMI BIOS'es at the time used the EGA 8x14 mode for the POST screen precisely so they could display the logo without having to worry about the character padding to 9 pixels.

    • @alexloktionoff6833
      @alexloktionoff6833 День назад +7

      I know it's possible to 'tweak' VGA to use 8 pixels for font. But is there a 'standard/proper' way to switch VGA into 640x350 EGA text mode?

    • @paulwratt
      @paulwratt 18 часов назад

      @@alexloktionoff6833 VESA modeset .. (should work on 99.9% of video cards)

    • @petevenuti7355
      @petevenuti7355 18 часов назад

      Where can I find out about how the BIOS interacts with the mmu? My goal is to modify your system or create a driver that allows one to use Isa visa or PCI cards, or external bus like ide or SCSI
      *_AS RAM_*
      That is , make usable and report to the OS , some arbitrarily huge amount of RAM (up to the max of whatever bit system will be installed,16,32,64)
      The problem is I want more available RAM then there is room in real hardware ram for the page table, making paging impossible , not just impractical due to thrashing.
      How would I redirect memory access at the BIOS level?
      Just for proof of concept I would start by using a dedicated hard drive as RAM, and then the actual ram as an l2 cache. Then if I can get that to work, I would design a card containing dram to serve the same function. I understand the bus speed limitations would make memory access a thousand times slower at least, but when you compare that to having 95% of your memory paged out and constantly thrashing to a slow hard drive, It's actually an improvement.
      For such a cluge to work it would likely have to be implemented at the BIOS level. Direct addressing of the mmu at the very least.
      Can I pick your brain and where can I learn more about how to do this?

    • @foogod4237
      @foogod4237 18 часов назад +5

      @@alexloktionoff6833 IIRC, you can do this by writing to the video card registers directly, but there is no standard support for doing that via the BIOS INT 10h call. (Note: Configuring the VGA card registers directly yourself is _entirely standard and proper_ for a DOS program to do (and was common practice for lots of programs that wanted to do more than very simple text/graphics displays). It just doesn't have a convenient helper function in the BIOS to make it easy for you, so you need to do more work, is all.)
      I think some old BIOSes may have had nonstandard video mode values you could use to switch to some of these alternate modes, but they were never "official", and could vary from one BIOS to another (and would probably not be supported by most emulators)...

    • @sodomizer3852
      @sodomizer3852 Час назад

      PCem still is a better option :)

  • @uzimonkey
    @uzimonkey День назад +167

    It's been a very long time, but there are two common text modes: a 640x350 EGA mode with an 8x14 font, and a 720x400 VGA mode with a 9x16 font. If I recall, the 9x16 font is really an 8x16 font with the left-most pixel always blank, and those are your ugly lines. You need to get into that 8x14 character size mode if you want it to display correctly.

    • @bitwize
      @bitwize День назад +31

      It's the rightmost pixel, and it is always blank... except in the characters from the range 0xB0 through 0xDF, the line/box drawing and filled block characters. In those, the ninth column is a double of the eighth column. So if you can create the Energy Star logo out of those characters, you can have it without the lines.

    • @fllthdcrb
      @fllthdcrb День назад +2

      @@bitwize I assume you mean with still changing the font. Although it would avoid the gaps, that wouldn't mean it's displayed correctly. It would still be the same aspect ratio, but with every eighth column doubled, so it would look like a very unevenly scaled version. That hack is definitely not suitable for most graphics.
      If you mean drawing a logo with the actual box drawing characters, that's an interesting idea, although I think it would be quite challenging to approximate that logo.

    • @eaty7dhu
      @eaty7dhu День назад +3

      @@bitwize it still would not create a smooth curve

    • @der.Schtefan
      @der.Schtefan День назад +7

      Correct, don't mess with the VGA mode, switch to EGA mode, the aspect ratio and font will look correct.

    • @ii795
      @ii795 День назад +4

      Nice to know though, I didn't know about this exception for 0xB0-0xDF characters. I recall it puzzled me when I played with font editor as a teenager circa 30 years ago. Mistery solved, finally! :)
      Thanks, @bitwize

  • @algonix11
    @algonix11 День назад +44

    I loved your video. I was an 18 year old kid who had access to almost nothing, but I loved poking around in interrupts and memory areas. I used Turbo Pascal with a bit of assembly.

    • @colinmaharaj
      @colinmaharaj День назад

      Still using 'borland' products

    • @haijuzerg6556
      @haijuzerg6556 13 часов назад +1

      Yep a small book of assembly listing the x86 instructions was my bible

  • @eformance
    @eformance День назад +44

    You need text mode 10h instead of 03h:
    10h = G 80x25 8x14 640x350 4 2 A000 64k EGA
    = G . . 640x350 16 . A000 256k EGA,VGA

    • @prozacgod
      @prozacgod 19 часов назад

      I was scrolling through the comments and everyone talking about the 8x14 font size and I'm like, if you know that, help the guy out with getting into it and you're like the first post I noticed that did it. I was about to dig through all my old references. I remembered vaguely what he needed to do, but couldn't remember the video mode. And 10 mode 10 go!

    • @foogod4237
      @foogod4237 18 часов назад +2

      10h is not a text mode. It is a *graphics mode* (that's why it says "G" instead of "T" in that row). Won't work the same way at all...

    • @EduardoGalarza
      @EduardoGalarza 15 часов назад

      Es posible realizar las graficas inclusive en Modo texto. Las aplicaciones MSDOS como Norton Disk Doctor hacian eso. Inclusive lo he hecho para hacer graficas en modo texto. Simplemente se asignan(W/8) * (H/16) caracteres ASCII y se les cambia el mapa de bits de dichos caracteres y se los presenta en pantalla.

    • @rashidisw
      @rashidisw 7 часов назад

      It is Graphics (G) mode not Text (T) mode, blinking cursor usually only available for T mode.

  • @DavidPfohmann
    @DavidPfohmann День назад +23

    Hey, cool video.
    As for the issue with the gaps. Some people already noted, it is connected to your VGA adapter using 9 pixel wide glyphs (as for 720 internal surface the VGA uses). The last bit is usually set to zero, so there's your black lines coming from. Except the range 0xc0 to 0xdf, the default fonts use this range as block characters, therefore the VGA will extend bit 8 to bit 9 so the block is filling the whole 9 bits and don't suffer the black gap (you can actually see this in your video as well, parts of the star as well as the horizontal line seem to be properly filled, except they arent really).
    If you run the program on an EGA or CGA adapter (try configuring the machine of your DoxBox) you'll see the logo is displayed perfectly fine. Thats probably not the fix you are looking for though. 🙂
    So, on the VGA you can set 8/9 dot mode flag to 1, so 8 bit wide characters are used: outport(0x3C4, 0x0101).
    Then your logo will hopefully shine in all its glory.
    Two more things:
    - the glyph foreground and background info are also in the epa file. You even loaded the data in your colourmap, but didn't use it somehow later.
    - instead of using putchar for the logo it would be probably more natural to write the logo (or the whole screen even) directly to text memory at 8B00:0000.
    Cheers

    • @Ice_Karma
      @Ice_Karma 20 часов назад +6

      *B800:0000. ♥

  • @edgeeffect
    @edgeeffect День назад +32

    I still remember the first time I got a motherboard with that Energy Star logo on it's boot screen... after many motherboards with text only (in those days it was almost "hey, it's been a couple of months... Time for a new motherboard ) suddenly it has this cool graphic on it too.... even though I thought it was SO cool, I never got around to finding out how it was done... I'm actually quite excited to see how you do it.

    • @davidflorey
      @davidflorey 17 часов назад +2

      Basically same here

  • @rootbeer666
    @rootbeer666 День назад +39

    Award BIOS screen is EGA, supporting both graphics and redefinable characters. As I was into BIOS modding I know for a fact that the Energy Star logo is a bitmap picture in the ROM.
    BIOS has a pure text fallback for CGA and MDA if EGA is not available.

    • @AnnaVahtera
      @AnnaVahtera День назад +3

      MDA was not the abbreviation I expected to see on RUclips today, but here we are. That brings up some lost memories.

    • @retinaquester
      @retinaquester День назад +2

      @@AnnaVahtera Well let's add a missing one for you, I have started with Pascal 6 on a Hercules Graphics Card (HGC).
      A somewhat weird mix from MDA and CGA, but still monochrome.

    • @AnnaVahtera
      @AnnaVahtera День назад +6

      @@retinaquester Ooh, I had a Hercules card in a.. 286? I think. I owned it only a short while before I got an EGA card.
      I also owned the weirdest CGA(-ish) graphics card that I've ever heard. It had support for 8 colors and had four times the memory CGA cards normally had. I never found any programs that actually supported it. (The PC was from a company that used it to draw plans for oil drilling rigs and they apparently needed all that graphics power back then.)

    • @dolphhandcreme
      @dolphhandcreme День назад +3

      Award BIOS switched to EGA after 4.50 or 4.51. The earlier ones where VGA textmode. You see that in the behavior of the cursor.

    • @clementpoon120
      @clementpoon120 День назад

      you can actually try out the monochrome fallback in 86box

  • @SirLoon
    @SirLoon 17 часов назад +2

    Maybe I remember it wrong, but I believe the logo faded out after some time and it was probably done by bitmap + palette rotation like it was done for Win95 loading screen

  • @DerMarkus1982
    @DerMarkus1982 День назад +30

    Hi NCOT,
    The reason there's vertical gaps in your "large" Energy Star logo in the top right corner is that in VGA mode you have an 8px horizontal character grid, but a 9px screen grid. The 8th - "last" - pixel of every line in a character is always duplicated to the 9th pixel. This way you have the possibility to make certain characters (box-drawing characters from the ASCII table's 2nd half, but also the plain old underscore "_") be horizontally continuous. You need to find a BIOS video mode where the horizontal pixels per source character matches the pixels per screen character, i.e. no pixel duplication. AFAIR the Energy Star logo does NOT use these duplicated pixels. It would be very obvious otherwise.

    • @RubenMartinezCabello
      @RubenMartinezCabello День назад +2

      EDITED: Not necesarily. 9th pixel duplication was enabled in the range of characters C0h-DFh when the flag "Line Graphics Enable" was enabled in the Attribute Mode Control Register (Index 10h). I remember being parametrizable in some EGA/VGA clones. When setting a video mode, those came preselected for the graphic characters (the box drawing characters). You can either remap the box drawing characters themselves, or use the registers to add your own characters to the range if you use an emulator that emulates compatible hardware (I think S3 did do it, but I don't know how good is S3 text mode emulation is in dosbox).
      That's why after this screen, the BIOS would clear the screen again resetting to a standard mode, and print the second part of the BIOS with the box detailing the CPU model, RAM, etc, resetting the font so it could print the box and then chainload to DOS, which may change the codepage (redefining the font again) without clearing the screen.

    • @DerMarkus1982
      @DerMarkus1982 23 часа назад

      @@RubenMartinezCabello Wow. I never knew this was configurable! I need to dig out my MS-DOS LiveCD again, and play with that a bit. Do you believe this INT 10h stuff works just as "back in the day" when subjected to "modern hardware"?
      (I once wrote a hotkey-bound screen-blanking TSR in machine code. With dos DEBUG iirc 🙃; some of that knowledge is still there...)

  • @dewdude
    @dewdude День назад +15

    I did things backwards. I learned MS-DOS programming by starting with ASM. I mean I tried C...but the thing I wanted to do tossed me off the low-level cliff and I wound up writing a bunch of assembly.

  • @dolphhandcreme
    @dolphhandcreme День назад +6

    15:18 Award started using graphics mode from 4.51 or later onwards. Before that, they used text mode with custom characters.
    Noticed this myself when working with older computers.
    You'll notice this by the cursor characteristics.
    To fix your issue, just use the characterspaces where the lines are going trough the right side of the character!
    The characters in VGA Textmode are 9x16. (or 9x14 depending on your mode).
    On some characters, if the rightmost bit is set, there'll be another bit added in the 9th column!
    Should be characters #192-223 afair.
    Edit: There are also textmodes with 8x14/8x16 characters. You can use one of them.

  • @monad_tcp
    @monad_tcp День назад +11

    2:28 oh , that brings me memories from my childhood, I was 10 and learning to program from quickbasic, I made one of those simulations of the PC booting.

    • @tarikb.9497
      @tarikb.9497 День назад +1

      Same here. It was on an XT, so still no EPA logo at the time and the bios vendor was different: American Megatrends...😢😢😢

  • @DaveManDaveDude
    @DaveManDaveDude День назад +5

    I love the idea of a forum. Love your videos, thanks so much!

    • @zakhoskins6404
      @zakhoskins6404 День назад +1

      Seconded. I was around 10 when most of this was being phased out. Now that I'm 37, I kind of want to know how my first PC actually worked given that my parents made me touch grass when I spent too much time on it. Discord is too impermanent, and weirdly not anonymous at the same time. I could care less about custom stickers and video chat. The archived wisdom is what people want.

  • @edbrito-swdev
    @edbrito-swdev День назад +7

    Me after finishing dinner: let me just finish some stuff up before going to bed.
    *This video shows up in my feed*
    God damn it. Now I need to know how this works.

  • @RachaelSA
    @RachaelSA День назад +2

    In the early 2000s some motherboards, like SiS started putting a 4Mb nvram chip as the bios, and you could patch your linux kernel, compile it and use a util to write it into that nvram chip, so when you turned on your computer there was none of that stuff, as it powered on it just said Loading Linux.... and started booting, there was no bios or bootloader.

  • @DeGuerre
    @DeGuerre День назад +5

    I had a lot of fun with demo stuff back in the day.
    The simplest demo effect to get your head around is probably colour cycling, such as the "wormhole" from Future Crew's "Unreal". You just need a static image, and the challenge is setting the palette using port I/O rather than BIOS calls, and syncing with the frame rate.
    Both of these things are important for most demo effects, because one of the things about "real" demos is that effects often fade in and out, and that's all done with palette manipulation in VGA.
    The next simplest effect is scrolling credits. You don't often think of this as an effect, but it uses a clever technique that's important to know about. Essentially, you use video memory as a circular buffer, and the "scrolling" is done by telling the VGA hardware where to start drawing from.
    The next simplest after that is probably vector dots, such as the "tunnel" from Second Reality. It can be done in VGA mode 13h, although Mode X is more common because the pixels are actually square. The main things that you need to know from the logic side are working with 32-bit fixed point arithmetic (typically 16 bits of integer and 16 bits of fraction), and precomputing sin/cos tables.
    On the graphics side, addressing VGA video memory (especially planar memory in the case of Mode X) is a little tricky, and using the memory latches effectively is part of the art of getting your demo effects to be performant. Eventually, you will work out for yourself why DOOM runs so damn fast: it draws all of the walls and sprites vertically.

    • @BastetFurry
      @BastetFurry День назад +1

      Not only demos, games in the VGA DOS times used that extensively, even if you where a bedroom hobby coder and "just" coded a little game in QBasic it was a nice way of getting some animation going without using much CPU cycles.
      For example id Tech 1, aka the Doom engine, used it for different brightness levels in the different sectors for example, you really only have eight brightness levels and the game runs on a palette of 32 colors in different brightness levels, with stuff like the invulnerability sphere or the brightness googles just using a different palette.

  • @snap_oversteer
    @snap_oversteer День назад +7

    Dave Brackeen's "256-Color VGA Programming in C" web tutorial is a good start for fast VGA under DOS.

  • @0xphk
    @0xphk 20 часов назад +1

    You just re-aligned so many memory regions in my old brain, that I was actually granted access again :D
    Would love to see a video about the EMM386 hacks (Not sure anymore but I think it was called EMM286 if I'm not mistaken here, way too long ago^^) that made some extended memory apps work on 286 as well, I was never really able to wrap my head around it back then.
    awesome vid and a new sub

  • @stuartaxon2898
    @stuartaxon2898 7 часов назад +1

    Re: the lines between each character, this is something you can toggle with text mode - I don't recall if it adds extra lines or changes the resolution.
    I'd find the PDF of PC Intern as it covers this (it was a 90s era book and came with its own PDF).
    There are different editions, mine had C, pascal and maybe even basic.

  • @alexloktionoff6833
    @alexloktionoff6833 23 часа назад +1

    Yes, this was also a revelation for me. Even we have 21 century all VGA monitors must support de-facto standard 640x350@70Hz

  • @chitonuarin
    @chitonuarin 15 часов назад

    Thanks for bringing back my memories. During my college years (93-96), I used this BIOS interrupt to customize the character set particularly to display a box on the screen with borders similar to Windows 3.11 or Norton Utilities 7.0 in text mode only. I only used extended ASCII box-drawing characters with no vertical gap when displayed.

  • @gorak9000
    @gorak9000 День назад +3

    wow, DJGPP sure brought back some memories - that's what I used when I first learned to code in C++ in grade 10, back in 1998!!!

  • @IragmanI
    @IragmanI День назад +4

    BIOS has microcode in it??! How have I not known that for the last 40 years. Very interesting video

    • @douggale5962
      @douggale5962 13 часов назад +1

      Did you know that modern CPUs can't start up? AMD uses their security processor to start it, and Intel uses their management engine processor. The RAM and PCIe don't work at power up, they don't have the calibration programmed in to deskew and set up the impedance adjustments. If you go back a little further, there are CPUs that only use their cache at startup, and it is enough to get through the memory and PCIe lane training.

  • @RavenMobile
    @RavenMobile 38 минут назад

    Growing up with DOS, I saw a few dozen text mode apps that rewrote the font for custom graphics... and hundreds that did not. It was really rare. I think my favourite was this file manager that had radio buttons for settings, and the circles were taller than 1 character, so there was a character with the very top of a circle, and one with the very bottom. It looked great! The app had a bunch of subtle graphics effects like that, was cool.
    I never learned how to rewrite the in-memory text mode font, but always thought it was way under-utilised. Would have been awesome for a roguelike game, you could have 150 or so custom sprites, along with letters. More if you only used uppercase letters. Combine that with 16 colours and you could do pretty impressive things in "text mode"!

  • @k0va1
    @k0va1 День назад +3

    It was a real pleasure to hear mention of machines like the BBC Micro and especially the ZX Spectrum - these were the very machines where it all began for many of us. To be honest, I never even considered before that UDG might exist on the x86 platform at all, although I did do a bit of programming under DOS before, using int10h and VGA.

    • @AureliusR
      @AureliusR 22 часа назад

      UDG?

    • @k0va1
      @k0va1 17 часов назад

      @@AureliusR UDG = User Defined Graphics, custom data instead of some specific character(-s) or custom font completely. In docs it mentioned as "user specified patterns". What I mean is shown somewhere at 10:06 :)

    • @AureliusR
      @AureliusR 15 часов назад

      @@k0va1 Oh, I just hadn't heard that acronym before. I had to create a similar thing for a C64 program I've been slowly building

  • @japjnl
    @japjnl День назад +1

    Boy does this bring back memories indeed. I remember using the VESA Bios Extension (VBE) in protected mode to access a Linear FrameBuffer (LFB) of the graphical display memory. There was a program called UniVBE/Scitech Display Doctor that you could run on graphics cards where the bios did not yet support that yet.

  • @edgeeffect
    @edgeeffect День назад +2

    Yeah... learning by doing is the best way... learning by doing an actual task too... some of my mates love "coding katas" but it's so much better to have a sort-of realistic goal.... Great stuff!

  • @evilman667
    @evilman667 День назад +4

    Hmm at 11:14; when you called int 10 you put a divergent value compared to the documentation in AX (1110 vs 1100).
    What’s the difference?

  • @angelisdania
    @angelisdania 5 часов назад

    Interesting video. Brought back a funny memory from high school. My dad set a BIOS password on our home PC, and only told it to my older sisters, who were only allowed to enter it for us if we had homework to do on the PC. So while I was doing my homework on the PC, I wrote an approximation of the BIOS screen in QBasic, then told my sister the PC had crashed, and asked her to type the password again. My program then saved her input to a text file, and voila, I now knew the password.

  • @TSW3585
    @TSW3585 День назад

    I was waiting this video weeks ago!!! I have been searching about this task also sinceb you told it on the last video. I love this kind of challenge!!

  • @stuartaxon2898
    @stuartaxon2898 7 часов назад

    PC Intern was a great book for this era of programming, and has some examples for changing the characters in VGA text mode.
    You could load two character sets (maybe this is what BH in the load function points to).
    The second set would be used if the high bit of the colour byte was set.
    In this way you can have a whole 256 characters for drawing at the same time as an ordinary one (if you also tell it that the high bit shouldn't make the characters blink).

  • @emahpour
    @emahpour День назад +1

    If I recall some Norton tools used a similar technique to make the DOS block mouse into a smooth "windows like" arrow that was moving pixel by pixel on the text screen modes.

    • @prozacgod
      @prozacgod 19 часов назад

      I remember reading that when I was a teenager and coding a bunch of DOS stuff and thinking, oh my god that sounds so cool I should implement this... dear god.. That was a week.

  • @Scherrah1010
    @Scherrah1010 22 часа назад +1

    AFAIK, the EPA BIOS Screen was EGA 640x350 and 80x25 using 8x14 Charset thus resulting in a slightly larger font. Maybe you selected the VGA 640x480 mode with 9x16 Charset, which would also explain the blank lines between each individual character…

  • @WBEEF557
    @WBEEF557 День назад +1

    I still remember using assembler to use in and out commands to put data in a000 (vga video memory) to put pixels on screen. And pallette swap/cycles to give it an animation feeling. I called int 21 also a lot for all the DOS functions.

  • @steeviebops
    @steeviebops День назад +1

    A few bits about the comparison you did to a real Award BIOS near the end. You can force 86Box to run in 4:3 from the View menu, this will probably make it look more like you'd expect it to look on a real screen. EGA was 640x350 if I recall, so would look vertically stretched on a 4:3 screen. I wouldn't be too concerned about the font because it was very specific to the video card manufacturer. The one in your 86Box VM looks somewhat like an S3 card. ATI had a different one, and Cirrus Logic used a different one that's very similar to what Nvidia used. It's also possible to change the font in DOS by using MODE to change the codepage, the font in your version looks very like the one from the EGA.CPI file.

  • @maxmuster7003
    @maxmuster7003 День назад +1

    A tiny pacman animation for the command prompt using 8*3=24 user character starting with extended ASCII number 128.
    The body starts inside of two character and each step it moves one pixel to the right side into a third character while open and close the mouth. And then it starts again one location(8 bit) to the right side.
    It save to executable. The first with all bytes and the second with the animation routine only. The cls command of DosBox reset all character to default.
    -a
    072D:0100 mov ax,1110
    072D:0103 mov bp,170 ; offset of character font (DOS com files start with DS=ES=CS=SS)
    072D:0106 mov cx,18 ; 24 character
    072D:0109 mov dx,80 ; start with ASCII number 128
    072D:010C xor bl,bl ; block 0 = override the existing character
    072D:010E mov bh,10 ; 16 bytes for one character
    072D:0110 int 10
    072D:0112 mov bx,8 ; row
    072D:0115 mov dx,18 ; collumn
    072D:0118 mov bp,bx
    072D:011A shl bx,7
    072D:011D shl dx,1
    072D:011F shl bp,5
    072D:0122 add bx,dx
    072D:0124 add bp,bx
    072D:0126 mov ax,b800
    072D:0129 mov es,ax
    072D:012B cld
    072D:012C mov ah,e ; color attribut
    072D:012E mov ch,18
    072D:0130 mov di,bp
    072D:0132 mov al,80 ; start with ASCII number 128
    072D:0134 mov cl,8
    072D:0136 stosw
    072D:0137 inc al
    072D:0139 stosw
    072D:013A inc al
    072D:013C stosw
    072D:013D inc al
    072D:013F sub di,6
    072D:0142 mov bl,al
    072D:0144 mov dx,3DA
    072D:0147 mov si,7000 ; delay
    072D:014A in al,dx
    072D:014B test al,8
    072D:014D jnz 014A
    072D:014F dec si
    072D:0150 jnz 014A
    072D:0152 mov al,bl
    072D:0154 dec cl
    072D:0156 jnz 0136
    072D:0158 mov byte ptr es:[bp],20 ; space
    072D:015D add bp,2
    072D:0160 dec ch
    072D:0162 jnz 0130
    072D:0164 ret
    072D:0165 org 0170
    072D:0170 DB 0,3,7,1e,3e,3f,7f,ff,ff,7f,3f,3f,1f,7,3,0
    072D:0180 DB 0,c0,e0,78,60,c0,80,0,0,80,c0,e0,f8,e0,c0,0
    072D:0190 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    072D:01A0 DB 0,1,3,f,1f,1f,3f,7f,7f,3f,1f,1f,f,3,1,0
    072D:01B0 DB 0,e0,f0,38,3c,f8,f0,c0,c0,f0,f8,fc,fc,f0,e0,0
    072D:01C0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    072D:01D0 DB 0,0,1,7,f,f,1f,3f,3f,1f,f,f,7,1,0,0
    072D:01E0 DB 0,f0,f8,9e,9f,ff,fc,e0,e0,fc,ff,fe,fc,f8,f0,0
    072D:01F0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    072D:0200 DB 0,0,0,3,7,7,f,1f,1f,f,7,7,3,0,0,0
    072D:0210 DB 0,78,fc,cf,cf,ff,ff,fe,fe,ff,ff,ff,ff,fc,78,0
    072D:0220 DB 0,0,0,0,80,80,c0,0,0,c0,80,0,0,0,0,0
    072D:0230 DB 0,0,0,1,3,3,7,f,f,7,3,3,1,0,0,0
    072D:0240 DB 0,3c,7e,e7,e7,ff,ff,ff,ff,ff,ff,ff,ff,7e,3c,0
    072D:0250 DB 0,0,0,80,c0,c0,e0,f0,f0,e0,c0,80,80,0,0,0
    072D:0260 DB 0,0,0,0,1,1,3,7,7,3,1,1,0,0,0,0
    072D:0270 DB 0,1e,3f,f3,f3,ff,ff,fc,fc,ff,ff,ff,ff,3f,1e,0
    072D:0280 DB 0,0,0,c0,e0,e0,80,0,0,80,e0,c0,80,0,0,0
    072D:0290 DB 0,0,0,0,0,0,1,3,3,1,0,0,0,0,0,0
    072D:02A0 DB 0,f,1f,e9,f9,ff,ff,fe,fe,ff,ff,ff,7f,1f,f,0
    072D:02B0 DB 0,0,80,e0,f0,c0,80,0,0,0,e0,e0,c0,80,0,0
    072D:02C0 DB 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0
    072D:02D0 DB 0,7,f,3c,7c,7f,ff,ff,ff,ff,7f,7f,3f,f,7,0
    072D:02E0 DB 0,80,c0,e0,f0,e0,c0,0,0,c0,e0,f0,f0,c0,80,0
    072D:02F0
    -n PACMAN.COM
    -rcx
    CX 0000 :1F0
    -wcs:100
    Writing 01F0 bytes
    -n PAC.COM
    -rcx
    CX 01F0 :53
    -wcs:112
    Writing 0053 bytes
    -q

  • @sirflimflam
    @sirflimflam День назад +3

    I always thought the EnergyStar EPA logo was some sort of graphical trick. I should have known they were simply replacing the extended ASCII characters.

  • @orchetect7415
    @orchetect7415 10 часов назад

    7:45 “Because this is a mid-90’s PC, it’s barely capable of doing anything when you first turn it on.“ I am a mid-90’s child and this is now becoming true for me too.

  • @trannusaran6164
    @trannusaran6164 23 часа назад +1

    Would also love to know if there are good resources for demo techniques like plasmas, text scrolls and such! If you find them, I'd love to watch you work through them on the channel :)

  • @madyogi6164
    @madyogi6164 19 часов назад +1

    Great work! I tried my approach but with assembly and firing code directly, without any OS. Must say, that's a struggle. Anyway, even poking through something as ancient as DOS in C must be a head ache today and quite demanding learning curve. Yo did a nice work! 👍

  • @knghtbrd
    @knghtbrd День назад +2

    Early PC BIOSes were just like a ROM for an 8-bit computer, a hand-written set of routines written in an assembler and burned into a mask ROM. It would later become an EEPROM so that it could be updated, and by the time of the "Award Modular BIOS", it was pretty much that: Modular, composed of many assembly files and a few others as well. Some computers had full-screen boot graphics. Just substitute that module for the one that did the normal Award boot screen. Some had SCSI hard drive interfaces instead of or addition to IDE, Just drop in the different pieces.
    Int 10h wasn't the main BIOS chip on the motherboard as you know, but the BIOS chip on your video card. As long as it provided a proper int 10h video BIOS interface, it didn't matter what the card did internally as far as DOS was concerned. Of course if it didn't do things the way MDA/CGA/EGA/VGA/VESA did them, lots of software would fail, so those became the baselines. But because everyone implemented those standards, it was easy to write to the VGA memory and registers directly.
    If you wanted to play with the segmented architecture and work in DOS real mode, you might try to see if you can pick up a copy of Borland C++ 3.1 or Turbo C++ 3.1 (the former is the same thing with extra stuff included…) A later Borland C++ compiler was eventually made free software I think, but not the older Turbo C++. Still, you can find it on winworld and … the fact that Borland C++ 4.5 was made free software sort of suggests that nobody gives a crap if you yarr matey the old version at this point.
    Back then it was real handy to be able to set VGA 80x25 by simply:
    _asm {
    mov ax, 0x03
    int 0x10
    }
    The gcc way of doing even that much … is kinda gross. But at least djgpp gives you a nice C++-like way to make BIOS calls from DPMI which is all you needed for most programs on any system DJGPP is likely to be used on (probably 486+…)
    I miss this era of programming. You could, and if you were serious you would, learn exactly how the hardware you were coding on behaved. A decade earlier, it would've been literally down to the ICs on the board, buy at this point it was still done by understanding each memory mode, CPU and hardware registers, I/O ports and IRQs, and yeah, a bit still about how the underlying chips performed.
    I don't even know modern amd64 assembly. What's the point? The mnemonics are getting kind of ridiculous, we're up from the better part of a dozen addressing modes to that plus instruction and data modes, you _can't_ access the hardware directly and are supposed to treat it like a black box with a limited and defined ABI, and it's "wrong" to depend on a given baseline of features because this year's hardware may or may not have all of the things last year's had. It's all handled by the compiler now to use or not use features if they are detected at runtime, without you worrying about it.
    This means you can use nice pretty-looking source code high level languages like Python and Ruby and Lua and treat them like serious development tools because they are … but it means you don't really learn how anything works anymore.

    • @myne00
      @myne00 День назад +1

      Most people don't care how anything works, only that it does.

    • @maxmuster7003
      @maxmuster7003 День назад

      From graphic mode into text mode
      mov ax,3
      int 10
      From 80x25 to 80x50 with 8x8 character size like norton commander:
      xor bx,bx
      mov ax, 1112
      int 10
      From 80x50 to 80x25 with 8x16 character size:
      xor bx,bx
      mov ax, 1114
      Int 10

    • @knghtbrd
      @knghtbrd День назад

      @myne00 those people don't make very clever devs. The ones who want to understand the clever tricks that make computers work are the ones who will write clever code that uses the hardware well.

    • @petevenuti7355
      @petevenuti7355 18 часов назад

      Back in the 8-Bit days, I was very fond of self-modifying code to get around memory limitations for program size. Instead of having to store all the code in memory, the program itself would generate the code on the fly and just having memory what it needed to run at the time. It's been so long since systems have "allowed" me to do that and between age and having two strokes I I'm not sure I could still do that if given the opportunity.
      Still, I don't like being told you can't, and I'm still fond of trying to make the impossible possible.
      Do you think in a modern system one might be able to write a low-level driver to modify mmu access so to allow use of addresses that are not allowed? Do you know where I could find more about accessing the memory management unit, both as a driver as well as modified bios?

  • @charleswhitney3235
    @charleswhitney3235 22 часа назад +1

    I miss old computers. I wish this could run on MacOS

  • @disdroid
    @disdroid День назад +1

    Ive still got a vga reference manual with the register codes for each different card. Its massive and takes up a huge chunk of my bookshelf. The interrupt manual was even bigger - i don't know what became of my copy.

  • @limtbk
    @limtbk День назад +1

    As I remember my school age (end of 1990-th) this issue with separated symbols came when I tried some videomodes with int10h. My theory is that there is some modes, where 1 bit of font is ignored (i.e. from 8x14 symbol only taken 7x14 pixels). Or in some modes one additional pixel is added between symbols. Also I saw that spaces when some residential apps like ciryllic font driver changed video mode. So just try other modes with int10h - there are some of them beyond standard values, described in manuals.

    • @OBrasilo
      @OBrasilo День назад +1

      There's two modes - 8 bits per character clock and the other one that extends to 9 by inserting a blank bit on every line or, for a handful of characters, a copy of the 8th bit (to allow for the box drawing characters to function properly). The Award BIOS uses the former, in EGA mode with 14 lines per character.

  • @TeslaTales59
    @TeslaTales59 День назад

    Nice work on this! Great BIOS memories.

  • @kilianhekhuis
    @kilianhekhuis 4 часа назад

    The "original PC" was not in EGA, but CGA. EGA was introduced with the PC/AT. However, by the time the EPA logos appeared on the POST screen, everybody had (S)VGA. The standard VGA text screen just doesn't lend itself very well for those pseudo-graphics, because of the 8/9 column thing.

  • @davidwilliams4845
    @davidwilliams4845 22 часа назад

    I used custom fonts to show graphic thumbnails in the MS-DOS version of the World Book Encyclopedia. It was very cool to have graphics mixed in with the article text and have it scroll at full speed.

  • @Darkstar2342
    @Darkstar2342 День назад +2

    what IDE is that? First I thought it was just Borland C++ with custom settings for using gcc instead of bcc, but then I noticed the forward slashes in the file names in the window titles, which is not something Borland did. It must be a newer IDE (DOS tools never used forward slashes), so now I'm curious :)

  • @kemi242
    @kemi242 День назад

    I always thought the Energy logo is some kind of graphics trickery. I've recreated that POST screen for fun, however I did this by implementing a method to output text in graphics mode using the VGA font.

  • @TimBell87
    @TimBell87 День назад +2

    Quick basic has those text and graphics modes built in, I used to mess around with them all the time as a kid.
    Perhaps you could compile a stub that just cycles through the screen modes and take a look at the disassembly.

  • @tehmoros
    @tehmoros День назад +1

    My initial guess is: a custom font or characters (it was possible to set on a BIOS level), which got swapped to regular ones before the OS started booting.
    EDIT: Yup, that's it. I've learned that when I was learning programming back in the 90. As for the gaps, you probably just need to choose a different video mode - one that has the same font size, the logo characters have. As you stated in the video: one was EGA, the other was VGA. I woudn't be surprised if the font was designed for a specific video mode.
    Also, demo programming? I really miss the demoscene. :)

  • @douggale5962
    @douggale5962 14 часов назад

    The reason is, in the hardware, it extends the 8th pixel into the 9th, only for a certain range of characters, the so-called "box-drawing" characters. For all other characters, the 9th pixel is transparent. Using an 8 pixel per character mode would fix it (EGA).

  • @charlessimonton
    @charlessimonton День назад +2

    The fact that you cleared the screen(memory) when you set the screen mode I believe is evidence that you infact changed video mode... I believe you might be looking for mode 0 at system boot; and if you set the video mode to 0 from mode 0 the screen shouldn't clear. I suppose you could change modes and change back to clear the screen, but I think the fastest way to do it is to just write blank characters(/0 or a space) to the bytes that represent unused characters in video memory.

  • @kilianhekhuis
    @kilianhekhuis 4 часа назад

    This was all bread and butter for me in the 90s :). Brings back memories...

  • @xdcountry
    @xdcountry День назад

    This is excellent- great way to tackle this stuff

  • @benjaminsmith3151
    @benjaminsmith3151 День назад

    I just found your channel, good stuff! I found a book in the library back in the early 90s that also came with a disk (As they often did back then). The book and software were for making fractals, and the software had tons of non-standard graphics modes that seemed to all work. I found a long out of print second edition, so I don't know if it's the one I remember from the library, but my copy only has the CD and is missing the disk. "Fractal Creations" by "The Waite Group" with Tim Wegner and Bert Tyler as the authors. I'm sure the software and the source code is easy to find, but this second edition book doesn't have nearly the detail I remember keeping me busy for months.

  • @theswedishdvf
    @theswedishdvf День назад +5

    The magic word your most likely are looking for is called : Line Graphics Enable (haven't played with it myself, but seems correct). Good luck!

    • @jimmyporter8941
      @jimmyporter8941 День назад

      That's a way of filling in the 9th pixel with either a column of foreground pixels or background pixels. It won't help here. He needs a text mode with 8 pixels wide characters.

    • @alexanderstohr4198
      @alexanderstohr4198 18 часов назад

      a staircase will be the result.

  • @nomnom-e4d
    @nomnom-e4d 4 часа назад

    It is 35 year old memory, but as far as I remember, we had to set the graphic mode to get the fonts changed. I had to use an integer number while setting the graphic mode and that gave me different VGA, EGA modes with different text size screens yet I could draw over it. BTW I am guessing you are using Turbo C. If you are then its help is amazing and I learned it all from the HELP menu. You will find this information in the HELP. Look for graphic modes.

  • @Salfke
    @Salfke 20 часов назад

    Very nice to see this example.
    Good explanation i never knew that it were actually ascii characters

  • @nychold
    @nychold День назад

    The ROM doesn't contain any CPU microcode in it at all. The CPU microcode is what tells the CPU what functions to perform when the instruction says MOV AX, [BP - 27] for example. That's a lot for the CPU to do in one cycle, so the microcode breaks that down into a few very simple steps.

  • @xor.cision
    @xor.cision День назад

    quality
    keep it up
    you already have this, king 👑

  • @weedfreer
    @weedfreer День назад +1

    Don't know if it helps, or, whether this is RUclipss algo serendipity, however, Dave's Garage has just put up a demo on how to program a matrix screensaver from scratch.
    Not watched it yet, but, it might have some useful info to cherry pick from?

  • @robertkalinowski6770
    @robertkalinowski6770 9 часов назад

    CPU twice faster then mine 😀
    Awesome retro, thank you. Beautiful memories, start programming, first enter in protected mode. What a thrill 😛

  • @alisharifian535
    @alisharifian535 День назад +1

    I used to do BASIC programming in DOS when I was a kid, and always wondered how computer can draw graphics on a screen mode that is obviously text mode,hence dos BASIC didn't allow you to draw graphics in text mode because DOS didn't allow BASIC to do it and again because BIOS routines were written that way😅. I learned many years later ( from Bits und Bolts) that the graphics are acrually custom ASCII charachter blocks.

  • @_chrisr_
    @_chrisr_ День назад

    I seem to recall that the specific font would be in the ROM somewhere on the graphics card so when in text mode the specific features of the font were dependent on that but in DOS you could load other characters if you wanted which would be used instead. I think my first machine came with utilities for this. The resolution in text mode isn't the same as in graphics mode which would explain why there were different proportions, I recall that the typefaces in graphics mode always looked a bit odd compared with the text mode ones.

  • @DaPutz
    @DaPutz 17 часов назад

    That's how all games are done on the Commodore 64. We move text around and directly manipulate the font in memory.

  • @kaveia
    @kaveia День назад +2

    at 2:51 you start compiling an say "this will take ages", but you appear to
    be running Turbo C++, the fastest compiler at the time. Then I noticed that the
    compiler is gcc, so what is your toolchain?

    • @prozacgod
      @prozacgod 19 часов назад +1

      DJGPP - This is a very old version of GCC that was ported to the DOS and ran in extended mode with its own DOS extender.

  • @ironwheal
    @ironwheal День назад +13

    you know something went horribly wrong when you need a dos extender to clear the screen. or when you ended up in protected mode for something as trivial as displaying some text in the first place.

    • @frankiejcr
      @frankiejcr День назад +21

      You know something has gone fantastically well when you realize that, despite certain difficulties, you have direct access to your computer hardware, which is well documented and published without restrictions. The same cannot be said for much of today's obscure and restrictive hardware.

    • @monad_tcp
      @monad_tcp День назад +10

      nothing went wrong, sometimes you just want to have fun with DOS without having to learn about stupid segmented memory. protected mode makes things super simple when programming in C

    • @ncot_tech
      @ncot_tech  День назад +5

      Before starting my last DOS video I did briefly wonder if I should just stick to Turbo C++ and real mode. Then I figured if I was going to emulate a fancy 486 I might as well use the chip "properly". I'll go play with real mode (and become a Real Programmer I guess...) when I get around to assembly.

    • @Wasmachineman
      @Wasmachineman 23 часа назад

      @frankiejcr YWONABH

  • @svofski
    @svofski День назад

    There was a trick when VGA mode started using 9-column characters. Wiki says: "In Line Graphics Enable mode, which causes code points 0xC0 to 0xDF inclusive[6] to have the 8th column repeated as the 9th.". I recall the repeating part, because I fiddled with redefining characters, but not that the repeating was restricted only to certain character codes. Maybe this feature could be switched off on demand using some registers.

  • @fnjesusfreak
    @fnjesusfreak День назад +1

    I think there's some VGA register that needs to be dinked to set the character cell width from 9 to 8.

  • @limpfishyes
    @limpfishyes День назад +2

    I recall you could avoid the pixel gap when using the box drawing characters somehow. Or maybe that character range is a special case on vga, in which case could you map the custom chars to the box line char numbers?

    • @Roxor128
      @Roxor128 День назад +1

      I think the special case might actually go all the way back to MDA.

  • @eaty7dhu
    @eaty7dhu День назад +1

    Don't forget the palette adjusting for fading at the end :) (yes, it's again a graphics mode thing and still have no idea how did they carry out in text mode)

    • @maxmuster7003
      @maxmuster7003 День назад

      It is made with user character in text mode and each location have one foreground color.

    • @eaty7dhu
      @eaty7dhu День назад +1

      @@maxmuster7003 that part is clear. for the fading I assume that the palette can be set in text mode as well.

    • @maxmuster7003
      @maxmuster7003 День назад

      @eaty7dhu Yes hex port 3c8 color and hex port 3c9 with three values for R, G, B each from 0 to 63.

  • @Aeduo
    @Aeduo День назад +1

    I used to use a game "engine" called megazeux that had a text mode that would work on _some_ video cards that would allow for 4 colors per tile, and each would be reduced to 4x14. Very weird, very difficult to work with. I believe it mostly worked with late 90s/early 2000s nvidia and ATI graphics cards but maybe some others.

  • @test-rj2vl
    @test-rj2vl День назад

    How did you change the rendering of ascii characters from how it was at 15:35 to how it was in 15:22?

  • @trinidad17
    @trinidad17 День назад +1

    15:58 "I'm not good at learning a bunch of theory in advance then work it out how to apply it"
    I am somewhat the same, although my brain also loves random trivia, so I also enjoy when I manage to make practical use of that too.
    Drawing Mandelbrot is not hard at all, and it's very interesting to optimize because it gets out hand fast.

  • @JSRFFD2
    @JSRFFD2 День назад +1

    I suppose if you want to have some period correct type of forum, you'd set up a text mode BBS accessible from Telnet or SSH. I don't know what was popular in the UK, but I spent countless hours accessing bulletin boards using telephone lines. I suspect this is considerably more of a pain than a forum or discord server, so I'm not sure I'm recommending that particular rabbit hole.
    Really enjoying the videos!

    • @quodpipax
      @quodpipax День назад

      Pain is what drives us. Good idea.

  • @diegofloor
    @diegofloor 13 часов назад

    I would visit a forum and/or discord. In fact, I am always on the lookout for these niche communities. The internet looks like it's ruled by giant social networks, but those places suck. I love all the smaller communities I'm a part of. I get much more value out of them.

  • @gh975223
    @gh975223 День назад

    i always wondered how the picture got printed on the screen, thanks for this

  • @JesusChristhasrisen-i4r
    @JesusChristhasrisen-i4r День назад

    That BIOS start screen is the times of computers!

  • @ErazerPT
    @ErazerPT День назад

    Fun stuff, mucking about trying to "faithfully" recreating it. The other option is to simply fake it, which would mean just setting the right screen mode and writing your own "raw drawing" parts, essentially recreating that part of the BIOS. Which, to be honest, is what you'll want to do for "demo like" stuff. Many of the "funkier" old school methods were a sort of necessity give HW limitations, but NOT fun bar the "abusing the system" part. If just wanting to do some "cool stuff", given any (half) decent CPU you're better off just using a memory buffer, raw dogging it and then simply copying some "viewport" to the screen memory every frame. But... and there's always a but isn't there... easier doesn't mean easy peasy. You have to write ALL the part you need. Text rendering? That's going to need a bitmap font and some blit'ting routines. So on and so forth. The nice part is that since you're just raw dogging a memory buffer from one place to another, you can write (and test) your "cool part" in a more friendly environment and then move it to the "real environment" pretty much "as is".
    Sine scrolling "text" is pretty iconic and simple to do for example, you just change the y coord of your base drawing point for every new column, shift the whole block to the left/right and draw the next column. Easy peasy. Unless you have it on top of other stuff. Then you need to do in on a separate buffer and blit it with masking. Ah, there we go ;) Background could be a star field or warp effect, which would be another two iconic ones, each with thousands of variations and challenges.

  • @snowdog993
    @snowdog993 4 часа назад

    It's been ages, but I believe it is a MODE call. The font could be CGA/EGA mode due to MGA. Maybe using a monochrome (into EGA) mode may fix the issue?
    It has to be within the same MODE so it can display the image no matter what display is used.
    So, a font, that can be used in MGA and EGA modes without the overlap. (8x14?) I am not sure.

  • @nigelmull5048
    @nigelmull5048 День назад

    VGA text mode adds a 9th column to fonts for spacing. Wikipedia discusses this in better detail on their VGA text mode page. It can be toggled on and off, though I don't recall the specifics. I have a .COM program to turn it off somewhere.

  • @ТрънчоДиваков
    @ТрънчоДиваков День назад

    In ancient video modes (cga/mda days) scrolling was as easy as changing 2 words of CRT controller chip configuration. For other modes with non-linear frame buffer I am not sure how difficult might be. That's another deep and cozy rabbit hole 😉

  • @skilletpan5674
    @skilletpan5674 22 часа назад

    The book "zen of Graphics Programming" by mark abrash is a good resource as well.

  • @maxmuster7003
    @maxmuster7003 День назад

    Function ax= hex 1100 or ax= hex 1110 of int hex 10 is for user character. On VGA text mode we start with 80x25 collumn and rows and 8x16 character size, so each character have 16 bytes.

  • @cbrunnkvist
    @cbrunnkvist День назад

    How precisely did you know which ASCII chars output/loop over though? Like, at 14:11 how did you arrive at "the blue guy must be 0xE6-0xEA? EDIT: oh, you're loading them yourself from file into those slots. Okay, so then the glyphs were just stored in that "epa" file, and the only thing you need to know/"guess" is the width in characters of each logo... Alright, got it :)

  • @TheUAoB
    @TheUAoB 22 часа назад

    Just a thought, but have you tried using dosemu2 instead of DOSBox for DOS/DJGPP development? I's quite nice in that it's like running a modern version of DOS on your native hardware but with quality of life VM features.

  • @limpfishyes
    @limpfishyes День назад +1

    This brings back memories. Have you tried mode 3 instead of 7?
    Edit: I'm an idiot, I can see you do use mode 3

  • @CoolDudeClem
    @CoolDudeClem День назад

    I allways thought this was something the monitor itself would display when it detected the PC turning on.

    • @maxmuster7003
      @maxmuster7003 День назад

      Some CRT monitor have an "out of range" message, if no input signal is aviable. I don’t know if a monitor can get special information from the bios, but we can get the EDID data from the monitor with the prefered resolution and the highest refreshrate using 16 bit mode of the CPU.

  • @MRooodddvvv
    @MRooodddvvv День назад

    I could clearly remember that with CRT this mode was noticeable different from normal text mode so my guess was it just graphical mode with using fonts from text mode to make impression of text mode

    • @techgeeknzl
      @techgeeknzl День назад +1

      No, it really is text mode. Specifically, it is 640x400 text mode with an 8x16 font.
      I don't recall if there is a VGA BIOS call for setting this particular mode, or if it needs to be "tweaked" from a standard mode; but there's more to it than just turning off the ninth bit of the character cell -- the two modes have different pixel clocks.
      If a tweak is required, it will be the same tweak that transforms (256 colour) 320x200 into 360x200, or (16 colour) 640x480 into 720x480

  • @AureliusR
    @AureliusR 22 часа назад

    You've set the screen mode to VGA, but then you're trying to set the font mode to EGA which doesn't make sense. You need to set the screen mode to the correct EGA mode instead of just switching into the screen mode that DOS is already in (where you clear your screen). Just make sure to switch back right before you exit :)

  • @steveokinevo
    @steveokinevo День назад

    Cuda core programming ya might like, pretty wild

  • @ivanovtv9817
    @ivanovtv9817 День назад

    11:13 instruction says that AX should be 1100 but code sets it to 0x1110, not 0x1100. is this a typo or am i missing something?

  • @johnnyhsy
    @johnnyhsy День назад

    This is so interesting. Thank you for sharing.

  • @stevetodd7383
    @stevetodd7383 День назад +1

    Your text mode is 720 x 400, but 80 characters wide. 80 characters by 8 bits wide needs 640 pixels, so it uses a single pixel space between each character. Try text mode 10h (which is true VGA 640 x 350 with 8 x 14 fonts).
    The obvious question is, is it not possible to create 16 bit binaries any more? Switching between 32 bit and 16 bit modes with memory thunking has got to be the hard way of doing this.

    • @SianaGearz
      @SianaGearz День назад

      Well a list of (modern and classic) tools that emit 16-bit code has been eaten by RUclips's machine. You're apparently on your own but the list is extensive.

  • @countersurprise
    @countersurprise День назад

    Fantastisch video! I recognized “Hacking: the art of exploitation” by Jon Ericsson om your shelf. Fantastic book and great to see it

    • @countersurprise
      @countersurprise День назад

      By the way check root42 for retro dos programming VGA tricks

  • @nngnnadas
    @nngnnadas День назад

    Wouldn't it make more sense to make it a real-mode application without the Dos extention?I know OpenWatcom at least supports compiling those.

  • @-wx-78-
    @-wx-78- День назад

    Ahh, those days… Roger Wilton's “Programming Guide to PC Video Systems”, I/O ports' level of programming, 80×30 VGA text mode and such. 😉

  • @cocusar
    @cocusar День назад

    I wanted to modify the logo on a socket 7 motherboard I have, following BuB's tutorial, but the indexed bmp thing was way too complex to manually do it. This video might have prompted me to do a bmp to epa (with auto color indexing), which the tool provided on that tutorial can't do. Excellent video, I have subscribed!