This is a selection of public domain and free software that I have written since the late 1980s. Most of these programs can still be run using DOSBox, a DOS emulator.
Game - QuickBASIC - MS-DOS - 1989
In 1989, I developed a clone of a popular game using QuickBASIC on MS-DOS. The initial version of the game was created specifically for the GW-BASIC interpreter and consisted of just 74 lines of code. It was a compact implementation that captured the essence of the original game.
One interesting aspect of the game was the design of the "SEGMENT-DISPLAY FONT" used to display the score and other messages on the game board. I took great care in creating a visually appealing and functional font that resembled the classic segment displays often seen in electronic devices.
The combination of recreating a popular game and the unique design of the segment-display font added a special touch to the overall experience.
I have found the original "design" I made 30+ years ago :-)
Game - Turbo Pascal - MS-DOS - 1989
Back in 1989, I created a simple game using Turbo Pascal on MS-DOS. The inspiration behind this game came from a TV show that I used to watch many years ago.
Drawing upon the elements and themes from the TV show, I crafted a game that captured the essence of its unique concept. The goal was to recreate the excitement and entertainment that I experienced while watching the show, and transform it into an interactive gaming experience.
With Turbo Pascal as my programming language of choice, I was able to bring the game to life on the MS-DOS platform. The game featured engaging gameplay mechanics and captivating visuals that mirrored the spirit of the TV show.
MicroCad 1.0
Painting tool - Borland Pascal - MS-DOS - 1990
In the year 1990, a friend and I collaborated on creating a painting tool using Borland Pascal on the MS-DOS platform. It was an exciting project that allowed us to explore our creativity and programming skills.
The initial version of the program was a humble beginning, but we continuously added new features and functionalities over time. One notable addition was the implementation of mouse support, which greatly enhanced the user experience by allowing precise and intuitive interactions with the painting tool.
Furthermore, we incorporated printer (Epson) support into the program, enabling users to print their artwork directly from the application. This feature expanded the possibilities for sharing and showcasing creations made with our painting tool.
Revisiting the project, I recently stumbled upon the binaries of the first version, which brought back a wave of nostalgia. It reminded me of the hours spent coding, testing, and refining the program with my friend.
Creating this painting tool was not only a technical accomplishment but also a testament to our passion for digital art and the joy of collaboration. It was a project that combined our programming skills with our shared love for creativity and expression.
Vga Poker 3.0
Game - Borland Pascal - MS-DOS - 1991/92
During the years 1991 and 1992, I worked on developing a game using Borland Pascal for the MS-DOS platform. It was an exciting endeavor that allowed me to explore the realm of game development and share my creations with a wider audience.
The first two versions of the game underwent thorough reviews and refinement before being published on McMicrocomputer magazine which was providing also a prominent platform for showcasing software during that era. Having my game reviewed and published was a significant milestone in my journey as a game developer.
The process of creating the game was both challenging and rewarding. It involved designing captivating gameplay mechanics, creating captivating visuals using the limited resources of the MS-DOS platform, and optimizing the code for smooth performance on various computer systems of that time.
The feedback and recognition received from the community after the publication of the game encouraged me to continue refining and expanding its features in subsequent versions. It was a testament to the passion and dedication I had for creating enjoyable gaming experiences.
Looking back, those years hold a special place in my heart as I reminisce about the joy of programming and the excitement of seeing my project come to life.
Library - Distributed by McMicrocomputer 120
In the years 1991 and 1992, a friend of mine and I collaborated on the development of a books database manager named Library using both QuickBASIC and Turbo Pascal for the MS-DOS platform. Our goal was to create a robust and user-friendly application that could efficiently manage a collection of books.
The process of creating this software was a joint effort that allowed us to leverage our programming skills and combine our passion for books and technology. We carefully designed the database structure and implemented functionalities to enable users to organize, search, and update their book collections seamlessly.
After completing the initial development, we submitted our application to McMicrocomputer magazine for review. The magazine recognized the value and potential of our application and decided to publish it. This was an exciting achievement for us, as it meant our creation would reach a wider audience and benefit book enthusiasts who were looking for an efficient way to manage their collections.
Looking back, the experience of creatingLibrary remains a cherished memory. It was a project that combined our passion for programming and the joy of collaborating with a friend.
Z80 Edit
IDE/Assembler - Borland Pascal / Turbo Vision - MS-DOS - 1992/1993.
During my final years of studying electronics, I embarked on a challenging project that would combine my passion for programming and my knowledge of electronics. As part of my graduation requirements, I decided to develop an IDE (Integrated Development Environment) and an Assembler specifically designed for the Zilog 80 microprocessor.
To bring this project to life, I utilized the powerful combination of Borland Pascal and Turbo Vision frameworks on the MS-DOS platform. These tools provided a solid foundation for creating a feature-rich environment that would facilitate the development and assembly of code for the Zilog 80.
The primary objective of the IDE/Assembler was to streamline the process of writing and assembling code for the Zilog 80 microprocessor. I aimed to provide an intuitive and user-friendly interface that would enhance productivity and make the programming experience more enjoyable.
The development of the IDE/Assembler spanned over the course of 1992 and 1993. I dedicated countless hours to designing and implementing various components. The Turbo Vision framework proved invaluable in creating a visually appealing and interactive user interface.
Upon completion, the IDE/Assembler became a vital tool for my graduation project in electronics. It allowed me to write, assemble, and test code efficiently for the Zilog 80 microprocessor. The project demonstrated my technical skills, attention to detail, and ability to apply programming concepts in a real-world context.
The experience of developing the IDE/Assembler was both challenging and rewarding. It not only solidified my understanding of electronics and microprocessor architecture but also sharpened my programming abilities.
Reflecting on those years, I am grateful for the opportunity to combine my educational pursuits with my love for programming.
Restaurant Manager - Borland Pascal/Borland Assembly - MS-DOS - 1994
In 1994, I had the chance of working on one of my first commissioned projects. The task at hand was to develop a Restaurant Manager software solution using Borland Pascal (and Borland Assembly) for the MS-DOS platform.
The purpose of the Restaurant Manager was to support and streamline the operations of a restaurant during large-scale events with thousands of customers in attendance. The software aimed to enhance the efficiency of the restaurant service, ensuring smooth operations and exceptional customer experience.
To achieve this, I leveraged the power of Borland Pascal and Borland Assembly, utilizing their robust features and libraries to create a comprehensive management system. These programming languages provided the necessary tools and capabilities to develop a solution tailored to the specific needs of the restaurant industry.
The Restaurant Manager encompassed various essential functionalities. It facilitated order management, allowing the staff to efficiently take and process customer orders. The software also featured inventory management capabilities, ensuring that ingredients and supplies were effectively tracked and replenished as needed.
To further enhance the customer experience, the Restaurant Manager incorporated table management functionality. It enabled the staff to efficiently assign and track table reservations, ensuring timely service and optimal table utilization.
Additionally, the software provided real-time reporting and analytics, allowing the restaurant management to monitor key metrics such as sales, revenue, and customer satisfaction. This data-driven approach empowered them to make informed decisions and optimize their operations for future events.
Demo - Borland C++ / Borland Assembler 386 - MS-DOS - 1995/1996
In the mid-1990s, after being captivated by the mesmerizing games developed by ID Software, I was inspired to embark on a personal challenge. Fueled by my passion for programming and a desire to push the boundaries of what I could create, I set out to implement my own graphics engine. Coincidentally, during this time, I made a friendly bet with a friend, confidently stating that I was capable of achieving this ambitious goal.
To bring my vision to life, I utilized the power of Borland C++ and Borland Assembler 386, both renowned tools for developing high-performance software on the MS-DOS platform. Leveraging their capabilities, I embarked on the exciting journey of building a graphics engine from scratch.
The goal of my graphics engine was to replicate the immersive and visually stunning experiences I had witnessed in ID Software's games. I wanted to create a demo that showcased the potential of computer graphics and pushed the limits of what was possible on the MS-DOS platform.
Throughout the development process, I immersed myself in the intricacies of graphics programming, exploring algorithms and techniques to render and animate visually appealing scenes. It was a journey of trial and error, experimentation, and constant learning as I pushed the boundaries of my knowledge and skills.
Using Borland C++ as the primary programming language and Borland Assembler 386 to harness the full power of the 386 processor, I meticulously crafted the various components of the graphics engine. This included developing algorithms for efficient rendering, implementing texture mapping, and experimenting with lighting and shading techniques.
The journey was not without its challenges. MS-DOS, while a powerful platform in its own right, posed limitations in terms of hardware capabilities and memory management. Overcoming these constraints required careful optimization and resource management to ensure smooth performance and compatibility across a range of hardware configurations.
After months of dedication and countless hours of coding, debugging, and refining, I successfully completed my graphics engine. The result was a visually impressive demo that showcased the capabilities of my custom-built engine.
The completion of the demo not only won me the friendly bet with my friend but also left a lasting impact on my programming journey. It reinforced my passion for graphics programming and ignited a deep interest in the field of game development.
Reflecting on that period, I am grateful for the inspiration I drew from ID Software's games and the personal challenge I set for myself. The experience of developing my own graphics engine not only expanded my technical skills but also instilled in me a sense of creative empowerment and a drive to continue pushing boundaries in the world of software development.
While the MS-DOS era has faded into history, the lessons learned and the passion ignited during the development of my graphics engine continue to fuel my enthusiasm for creating immersive and visually captivating experiences in modern-day game development and interactive media.
Binary Editor / Disassembler x86 - Borland Pascal - MS-DOS - 1991-1998
Between 1991 and 1998, I embarked on the development of a versatile binary editor and disassembler for the x86 architecture using Borland Pascal on the MS-DOS platform. This project was born out of the recognition of the indispensability of binary editors and the need for a powerful tool capable of disassembling x86 machine code.
The binary editor I created served as a valuable utility for working with binary files at a low level. It provided the ability to view and modify the contents of binary files directly, giving users granular control over the data within. This was particularly useful when dealing with file formats that required manual manipulation or when analyzing binary data for debugging or reverse engineering purposes.
One of the standout features of this binary editor was its integrated x86 disassembler. This disassembler was designed to translate raw machine code instructions into human-readable assembly language instructions. This functionality proved invaluable for analyzing and understanding the inner workings of compiled executable files, libraries, and other x86 machine code artifacts.
The disassembler component provided insight into the underlying structure and logic of the disassembled code, allowing users to study program flow, identify function calls, and gain a deeper understanding of the program's functionality. This was particularly beneficial for software developers, security researchers, and anyone involved in low-level software analysis.
The reasons for incorporating a disassembler into the binary editor were apparent. It enabled users to delve into the intricacies of executable files, study proprietary algorithms, identify vulnerabilities, and perform reverse engineering tasks. With this tool at their disposal, users could explore and comprehend the assembly code generated by compilers, providing valuable insights into program behavior and aiding in the debugging process.
The development of the binary editor and x86 disassembler spanned several years, during which I continually refined and enhanced its functionality. I implemented additional features to improve usability and expand its capabilities. The project was driven by my fascination with low-level programming and the desire to provide a comprehensive tool for binary analysis.
The resulting binary editor and disassembler offered a robust and intuitive interface for manipulating binary files and dissecting x86 machine code. Its capabilities empowered users to interact with binary data at a fundamental level, enabling a deeper understanding of software systems and facilitating tasks that required fine-grained control over data manipulation.
Although the MS-DOS era has long passed, the lessons learned and the skills acquired during the development of this binary editor and x86 disassembler continue to resonate in my programming journey. It laid the foundation for my subsequent ventures into reverse engineering, software analysis, and low-level programming, shaping my understanding of computer architecture and fueling my passion for exploring the inner workings of software systems.
Even in today's modern computing landscape, binary editors and disassemblers remain essential tools for various domains, including software development, security research, and system analysis. The legacy of my binary editor and x86 disassembler lives on, reminding me of the enduring value of building powerful tools that empower users to explore the depths of binary data and unravel the mysteries of software.
CD Player - Visual C++ - Windows - 1999/2000
In the late 1990s I found myself in need of a simple CD player for my Windows system. Dissatisfied with the feature-heavy existing options available at the time, I embarked on a personal project to create my own CD player using Visual C++.
Motivated by a desire for simplicity and a tailored user experience, I delved into the world of Windows programming to develop a minimalist CD player that met my specific requirements. By crafting the application from scratch, I had full control over its functionality and user interface, enabling me to streamline the experience to suit my preferences.
Using Visual C++, a powerful integrated development environment (IDE), I leveraged the Windows APIs and multimedia libraries to build the CD player application. This allowed me to interact with the CD drive, access audio tracks, and control playback functionality, all within the familiar Windows operating system environment.
The primary objective of this project was to create a straightforward CD player that provided essential features without unnecessary complexities. The user interface was designed to be intuitive and user-friendly, enabling easy navigation and control over CD playback. With a focus on simplicity, I aimed to provide a hassle-free experience for enjoying music from CDs.
By developing my own CD player, I could tailor the application to my specific needs and preferences. I could prioritize essential functions such as play, pause, stop, and track selection, without the distractions of additional features that I didn't require. This allowed for a streamlined and efficient user experience, ideal for those seeking a straightforward CD playback solution.
The development process involved integrating multimedia capabilities provided by Windows into the application. This included leveraging APIs to interact with the CD drive, retrieve track information, handle audio playback, and provide a responsive and reliable user interface. Through careful coding and testing, I ensured a smooth and seamless CD playback experience for the end user.
I refined the CD player's functionality and user interface based on personal feedback and preferences. The result was a tailored CD player application that fulfilled my needs for a simple, no-frills music playback solution on my Windows system.
While the CD player project may seem relatively modest compared to more complex software endeavors, it served as a valuable opportunity for me to dive into Windows programming and gain practical experience with Visual C++. It allowed me to exercise my creativity and problem-solving skills while delivering a custom solution that met my specific requirements.
Even though the era of physical CDs has largely transitioned to digital music streaming, the experience gained from developing the CD player remains relevant in my programming journey. It instilled in me the importance of simplicity, customization, and user-centered design, principles that continue to guide my approach to software development.
While there may be an abundance of feature-rich media players available today, the CD player project serves as a reminder of the value in crafting tailored solutions that cater to specific needs and preferences.
Network Analyser - Visual C++ - Windows - 2001
In 2001, I undertook the development of a Network Analyzer tool using Visual C++ for the Windows platform. The purpose of this tool was to provide users with the capability to examine data from a live network or from captured files.
To facilitate the packet capture and analysis functionality, the tool relied on WinPcap, a widely-used library for network monitoring and packet capture on Windows systems. WinPcap provided the necessary APIs and functionality to capture network packets, extract data, and perform various analysis tasks.
One notable aspect of this Network Analyzer tool was its origins as a commercial software. I was able to strip out proprietary protocol decoders from the original commercial version and release it as a free tool for the community.
The Network Analyzer allowed users to monitor and analyze network traffic in real-time, providing insights into network performance, security, and troubleshooting. It enabled the examination of various protocols such as TCP/IP, UDP, ICMP, HTTP, and more, giving users a comprehensive view of network communication.
Through the user-friendly interface, users could select the network interface to capture packets, set capture filters to focus on specific protocols or IP addresses, and analyze packet details including source and destination addresses, packet length, protocol information, and payload data.
The tool provided features for capturing and saving packet data to files, allowing users to analyze captured data offline. It supported the import of existing packet capture files, enabling users to perform in-depth analysis and investigations on previously captured network traffic.
By leveraging the capabilities of WinPcap, the Network Analyzer offered efficient and reliable packet capture and analysis functionality. The tool provided a range of features, including packet filtering, statistics generation, protocol decoding, and the ability to export captured data for further analysis or reporting.
The release of the public domain version of the Network Analyzer aimed to make network analysis accessible to a broader audience, removing barriers imposed by proprietary protocols decoders and commercial licensing. The tool empowered network administrators, security professionals, and enthusiasts to gain insights into network behavior and troubleshoot issues without incurring additional costs.
The development process involved extensive testing, debugging, and refining of the Network Analyzer to ensure its stability and usability. Feedback from users in the network analysis community played a crucial role in improving the tool and enhancing its features over time.
Overall, the Network Analyzer project showcased my commitment to providing valuable software solutions to the community. By leveraging Visual C++ and WinPcap, I was able to create a powerful network analysis tool that offered insights into network traffic, promoting network monitoring, troubleshooting, and security analysis.
While the Network Analyzer project took place in 2001, its impact and relevance have extended beyond that time frame. It served as a stepping stone in my journey as a software developer, fostering a deeper understanding of network protocols and analysis techniques. The experience gained from developing this tool continues to influence my approach to software development, emphasizing the importance of open-source solutions and community collaboration.
Please note that WinPcap has been superseded by Npcap, an updated version of the packet capture library, which provides enhanced features and support for modern Windows versions.
3D Engine Demo - Visual C++ - Windows - 2005
In 2005, I developed a 3D Engine Demo using Visual C++ for the Windows platform. The purpose of this demo was to showcase the capabilities of a ray casting 3D engine and provide a practical example for an article I had published in Computer Programming Magazine.
The demo was built upon the principles of ray casting, a technique used to render 3D graphics by tracing rays from the viewer's perspective and calculating the intersections with objects in the scene. It aimed to demonstrate the potential of ray casting engines for creating immersive and interactive 3D environments.
To ensure the accessibility and availability of the demo, I refactored the original source code and made it freely accessible on GitHub. Interested individuals could access the code repository at https://github.com/eantcal/Winraycast, allowing them to explore and study the inner workings of the 3D engine.
The demo offered users a glimpse into the capabilities of the ray casting 3D engine by presenting a visually engaging scene rendered in real-time. It showcased features such as textured walls, floor, and ceiling, as well as the ability to move through the environment and interact with objects.
By leveraging the power of Visual C++ and the Windows platform, the demo provided a smooth and responsive user experience. It utilized optimized algorithms and techniques to efficiently calculate ray-object intersections, handle rendering, and update the display in real-time.
The article published in Computer Programming Magazine accompanied the demo, providing in-depth insights into the concepts and techniques behind ray casting 3D engines. It explained the fundamentals of ray casting, discussed the implementation details of the demo, and offered guidance for readers interested in exploring and developing their own 3D engines.
The 3D Engine Demo served as a practical and illustrative example, inspiring aspiring game developers, graphics enthusiasts, and software engineers to delve into the exciting field of 3D graphics programming. It encouraged experimentation, learning, and the exploration of advanced rendering techniques.