About:

Nemanja Trifunovic shares insights on programming and retro computing through short posts.

Website:

Specializations:

Interests:

Programming Retro computing
Subscribe to RSS:
The post explores the design similarities and controversies between MS-DOS and CP/M, arguing that while MS-DOS adopted some design elements, it did not copy CP/M's internal code.
This post simplifies position-independent code by using the Apple II to demonstrate how to write programs that function correctly regardless of their memory address.
The delay of CP/M-86's release allowed Microsoft to dominate the market with MS-DOS, highlighting the impact of timing in technology development.
The blog post recounts the history of the GEM (Graphic Environment Manager) desktop environment developed by Digital Research Inc. It begins with the author's personal experience with the Atari 520 ST and transitions into the deve...
The article discusses the pivotal role of the PDP-10 mainframe in the development of early microcomputer software, highlighting key figures like Gary Kildall and the creation of CP/M, the first commercial operating system for micr...
The post examines the complex relationship between Bill Gates and Gary Kildall, revealing the dynamics of competition and collaboration in the early microcomputer software industry.
The post discusses benchmarks comparing different techniques for calculating UTF-8 sequence lengths, specifically focusing on a hardware-assisted method that underperformed compared to a naive approach. The author analyzes the per...
This post benchmarks three methods for determining the length of UTF-8 encoded byte sequences: the bitmask method, the lookup method, and the countlz method. It compares their performance using pure ASCII text and Cyrillic text wi...
This post is the fourth part of a series on decoding UTF-8 sequences, focusing on determining the sequence length using hardware assistance. It explains how to calculate the length based on the lead byte's bits, utilizing the C++2...
The article discusses methods for counting leading zeros in an unsigned byte value using C and C++ programming languages. It presents a basic approach using bit manipulation in C++, explores the introduction of bit utilities in th...
The blog post provides an in-depth explanation of the BFM instruction in Arm64 architecture, including its syntax, functionality, and practical examples.
The blog post discusses the launch of the IBM Personal Computer 5150 in 1981, highlighting its significance in the microcomputer industry. It details IBM's strategy to create a personal computer using off-the-shelf parts, the unex...
This blog post is the third part of a series on decoding UTF-8, focusing on determining the sequence length of UTF-8 encoded characters using a lookup table. It explains how to create a hard-coded lookup table that maps lead byte ...
This blog post is the second part of a series on decoding UTF-8, focusing on determining the length of a valid UTF-8 sequence based on its first byte. It explains how to implement this in C, detailing the conditions for single, tw...
A simplistic UTF-8 decoder in C is presented, emphasizing when validation can be skipped and providing code for decoding various byte sequences.
The text is a short story about two pioneers in the microcomputer industry: Clive Sinclair and Gary Kildall. Sinclair, a self-educated British inventor, is known for his role in the home computer revolution and the ZX Spectrum, wh...
The post provides a comprehensive guide on how to install and use the Fuse emulator for the ZX Spectrum, detailing the installation process, basic usage, and key commands. It explains how to load games, specifically using the exam...
The article is the first part of a series about decoding UTF-8 encoded text. It focuses on converting sequences of UTF-8 encoded 8-bit wide octets to UTF-32 encoded Unicode code points. It explains the process of decoding UTF-8 an...
The text discusses the development of 86-DOS, which later became Microsoft's MS-DOS. It details the history of personal computers and the development of the 8086-based board. It also covers the relationship between Seattle Compute...
The article discusses disassembly with LLDB, a popular debugger, and compares it with GDB. It covers the sample C program, compiling it, and using the LLDB command. It also explains the disassemble command and its usage, and the e...
The article discusses the Jupiter Ace, a home computer launched in the UK in 1982, and its use of Forth instead of BASIC. It explores the importance of BASIC in early home computers, the characteristics of BASIC and Forth, and the...
The text provides a detailed guide on how to use gdb to view the assembly alongside the source code when debugging C or C++ code. It includes examples of analyzing disassembled code, compiling a simple program, running it from the...
The text discusses the origins of MS-DOS and its relation to Xenix, a Unix derivative. It explains why MS-DOS was a CP/M derivative and not a Unix, and the limitations of running a full Unix on early microcomputers. It also highli...
The text explains the concept of veneers on Arm64 Windows, which are small pieces of code inserted by the linker to extend the original jump. It provides an example using Arm64 Visual C++ 2022 and illustrates the concept with a sm...