5 ms·
Building a Tetris Clone in X86 Assembly, Pt. Ⅰ: Hello, World
- pki 11y agothere's no comment section there so i'd figure i'd ask here: what is that font that it outputs? is that part of BIOS or something? or part of boot loader or PXE server? i assumed asm was the lowest level, is there some builtin font by default that can't be changed or something?
- thinkpad20 11y agoI haven't read through the tutorial, but I would assume that the programmer does not specify the fonts being used, but rather outputs bytes to stdout. It's the terminal emulator that's running the program that is responsible for displaying those bytes, so that's where things like font would be set.
- programble 11y agoIt is indeed the default BIOS font. You usually get it when switching to a TTY on Linux, as well.
- cnvogel 11y agoBut of course nowadays most distributions use KMS and put the consoles in a graphics mode on which the virtual console is emulated.
- jquast 11y agoThe default video bios mode is used as-is here, https://en.wikipedia.org/wiki/Video_BIOS https://en.wikipedia.org/wiki/Video_BIOS There is no terminal emulator here. This hello world text is written directly to video memory -- and yes, there is a character rom, so placing a string of words in memory OR'd with bits set for video attributes (the #defines there) make it color.
- jquast 11y agoFurthermore, see an example of setting the mode explicitly from PC-DOS: https://github.com/johannesl/EditANSi/blob/master/ea.asm#L23 https://github.com/johannesl/EditANSi/blob/master/ea.asm#L23 and http://fleder44.net/312/notes/18Graphics/index.html http://fleder44.net/312/notes/18Graphics/index.html
- userbinator 11y agoMore detailed article on the text mode: https://en.wikipedia.org/wiki/VGA-compatible_text_mode https://en.wikipedia.org/wiki/VGA-compatible_text_mode (Many, including me, still consider the original IBM VGA text font to be one of the most well-designed and readable for displaying text.)
- cnvogel 11y agoIts part of the hardware (emulated by qemu). A VGA card (or any other text mode capable video adapter) will use either a portion of ROM or some part of video memory to hold the font from where its accessed simultaneously to the beam drawing the CRT screen. (Hercules, CGA, EGA, VGA all did this). In contrast to this, many Unix workstations never implemented such a thing and went directly to graphics framebuffers (SUN cgX framebuffers for the ... Sbus??). For that, of course you have to implement the font rendering in "bios" , or in the case of the sun machine in the OpenFirmware. Slowly.)
- cjauvin 11y agoIt's not 100% related but I had great fun building a very minimal Tetris clone in 6502 assembly, for the C=64, a couple of years ago (the code is "kinda" commented): https://github.com/cjauvin/tetris-464 https://github.com/cjauvin/tetris-464
- userbinator 11y agoTetris seems to be one of those games that people love to size-optimise in Asm; here's a few in the <512b category: http://www.pouet.net/prod.php?which=33942 http://www.pouet.net/prod.php?which=33942 http://www.pouet.net/prod.php?which=6951 http://www.pouet.net/prod.php?which=6951 There was a competition too, based on a standard appearance and behaviour, and the winner is 363 bytes: https://files.scene.org/view/mags/hugi/compos/hc22fin.zip https://files.scene.org/view/mags/hugi/compos/hc22fin.zip Vaguely related; chess game in 487 bytes: https://news.ycombinator.com/item?id=8954630 https://news.ycombinator.com/item?id=8954630
- akkartik 11y agoIs anybody able to get the repo running? 'make qemu' simply shows a blank screen and exits. But the repo seems much farther along than the blog post.
- programble 11y agoThe build defaults to debug, so `make qemu` also starts QEMU waiting for a debugger to attach. `make qemu BUILD=release` won't.
- akkartik 11y agoThanks!