Scientific calculator based on the 68008 microprocessor
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
I have successfully gotten a simple program written in C to run. The program prints out a stanza from the poem To a Waterfowl. After each stanza, it waits for user input before printing the next stanza. Source code is shown below:
void kernel_main(void) {
while (1) {
mc6850_print("Whither, 'midst falling dew,\
While glow the heavens with the last steps of day,\
Far, through their rosy depths, dost thou pursue\
Thy solitary way?");
mc6850_read();
mc6850_print("Vainly the fowler’s eye\
Might mark thy distant flight, to do thee wrong,\
As, darkly seen against the crimson sky,\
Thy figure floats along.");
mc6850_read();
mc6850_print("Seek’st thou the plashy brink\
Of weedy lake, or marge of river wide,\
Or where the rocking billows rise and sink\
On the chaféd ocean side?");
mc6850_read();
mc6850_print("There is a Power, whose care\
Teaches thy way along that pathless coast,—\
The desert and illimitable air\
Lone wandering, but not lost.");
mc6850_read();
mc6850_print("All day thy wings have fanned,\
At that far height, the cold thin atmosphere;\
Yet stoop not, weary, to the welcome land,\
Though the dark night is near.");
mc6850_read();
mc6850_print("And soon that toil shall end,\
Soon shalt thou find a summer home, and rest,\
And scream among thy fellows; reeds shall bend,\
Soon, o’er thy sheltered nest.");
mc6850_read();
mc6850_print("Thou’rt gone, the abyss of heaven\
Hath swallowed up thy form, yet, on my heart\
Deeply hath sunk the lesson thou hast given,\
And shall not soon depart.");
mc6850_read();
mc6850_print("He, who, from zone to zone,\
Guides through the boundless sky thy certain flight,\
In the long way that I must trace alone,\
Will lead my steps aright.");
}
}
This is what it outputs to the serial terminal:
#define MC6850_BASE 0xC0000
uint8_t* const mc6850_command = (uint8_t*)(MC6850_BASE);
uint8_t* const mc6850_data = (uint8_t*)(MC6850_BASE+1);
char mc6850_read(void) {
// check if RDR full
while (!(*mc6850_command & 1));
// read character from RDR
return *mc6850_data;
}
void mc6850_write(char c) {
// check if TDR empty
while (!(*mc6850_command & 2));
// write character to TDR
*mc6850_data = c;
}
void mc6850_print(const char* s) {
while (*s) mc6850_write(*s++);
}
I have implemented a very simple exception handler so that I can figure out what is causing the machine to fault.
Create an account to leave a comment. Already have an account? Log In.
Become a member to follow this project and never miss any updates
By using our website and services, you expressly agree to the placement of our performance, functionality, and advertising cookies. Learn More