A calendar computing project combining Assembly (x86), Turbo C, and Java GUI development — inspired by the Doomsday algorithm and rooted in low-level architecture studies.
This project was developed as part of the Computer Architecture course (IC-3101) at the Technological Institute of Costa Rica, under the guidance of Prof. Carlos Benavides. The aim was to bridge theoretical knowledge of low-level architecture with practical implementations using assembly language and GUI-based interfaces in Turbo C and Java.
The Gregorian calendar, widely used today, replaced the Julian calendar due to inaccuracies in its leap year calculations. This project focuses on computing calendar dates accurately using the Doomsday algorithm (proposed by John Horton Conway) or any equivalent method. It corrects previous issues with Julian date calculations by incorporating floating-point operations using the x87 FPU, and it enhances user interaction through GUI interfaces.
This repository includes:
- An x86 Assembly program that calculates Gregorian calendar data from -5777 to 7777.
- A Turbo C application linked to the ASM component, with a user interface.
- A Java application also linked to the ASM component via graphical interface.
- Gregorian calendar rendering by month or year, with full weekday names (e.g., Sunday, Monday).
- Supports historical transition from Julian to Gregorian (e.g., 5th to 15th October 1582).
- User input via command-line arguments with optional help flags.
- Displays:
- The day of the week for a given date.
- The ordinal day of the year (e.g., 112th day).
- Days remaining in the year.
- Handles leap years and absence of year zero.
- GUI integration in both Java and Turbo C.
- All parameters passed using stack-based procedures.
- Internal code structure based on modular libraries and macros.
- Gain hands-on experience in x86 Assembly programming.
- Learn to integrate ASM with higher-level languages (C/Java).
- Develop better understanding of stack usage, FPU operations, and calendar computation logic.
- Reinforce theoretical computer architecture concepts with practical applications.