Star Wars Returns
This commit is contained in:
parent
6c5efc6044
commit
4041ad4032
|
@ -34,6 +34,9 @@
|
|||
void IoStartSpeaker(int freq);
|
||||
void IoQuietSpeaker(void);
|
||||
void IoDoBeep(void);
|
||||
void IoDoTone(uint tone, uint time);
|
||||
|
||||
void IoDoStarWars(void);
|
||||
|
||||
//----------------------------------------------------------------------------//
|
||||
|
||||
|
|
|
@ -49,6 +49,7 @@ extern void IoPrintRtcTime(void);
|
|||
extern ulong IoGetRtcTicks(void);
|
||||
extern Time_t* IoGetRtcTime(void);
|
||||
extern char* IoGetRtcTimeChar(void);
|
||||
extern void IoRtcWait(uint time); // time in ms
|
||||
//static char* WeekDays[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
|
||||
|
||||
//----------------------------------------------------------------------------//
|
||||
|
|
|
@ -87,7 +87,7 @@ noreturn void BtStartKern(multiboot_info_t *mbInfo, uint mbMagic, void *codeSeg)
|
|||
|
||||
IoPrintRtcTime();
|
||||
|
||||
IoDoBeep();
|
||||
IoDoStarWars();
|
||||
|
||||
KernLog("Goodbye at %s\n", IoGetRtcTimeChar());
|
||||
// End this machine's suffering
|
||||
|
|
|
@ -252,4 +252,12 @@ void IoEnableRtc(void)
|
|||
IoEnableNMI();
|
||||
}
|
||||
|
||||
void IoRtcWait(uint time) // time in ms
|
||||
{
|
||||
ulong frequency = 32768 >> (RtcRate-1);
|
||||
ulong beginTick = IoGetRtcTicks();
|
||||
while(IoGetRtcTicks() < beginTick + (frequency/1000) * time) {
|
||||
KePauseCPU();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
// Desc: Speaker functions //
|
||||
// //
|
||||
// //
|
||||
// Copyright © 2018-2019 The OS/K Team //
|
||||
// Copyright © 4018-4019 The OS/K Team //
|
||||
// //
|
||||
// This file is part of OS/K. //
|
||||
// //
|
||||
|
@ -53,12 +53,44 @@ void IoDoBeep(void)
|
|||
|
||||
IoStartSpeaker(1000);
|
||||
|
||||
// Worst possible way of waiting
|
||||
// We need actual timers
|
||||
ulong ticks = IoGetRtcTicks();
|
||||
while (IoGetRtcTicks() < ticks + 512);
|
||||
IoRtcWait(100);
|
||||
|
||||
IoQuietSpeaker();
|
||||
|
||||
}
|
||||
|
||||
void IoDoTone(uint tone, uint time)
|
||||
{
|
||||
|
||||
IoStartSpeaker(tone);
|
||||
|
||||
IoRtcWait(time);
|
||||
|
||||
IoQuietSpeaker();
|
||||
|
||||
}
|
||||
|
||||
void IoDoStarWars(void)
|
||||
{
|
||||
struct Note {
|
||||
uint tone;
|
||||
uint time;
|
||||
};
|
||||
|
||||
struct Note Score[36] = { {440, 200}, {110, 200}, {440, 200}, {110, 200},
|
||||
{440, 200}, {110, 200}, {349, 140}, {110, 100},
|
||||
{523, 60}, {110, 100}, {440, 200}, {110, 200},
|
||||
{349, 140}, {110, 100}, {523, 60}, {110, 100},
|
||||
{440, 200}, {110, 200},
|
||||
|
||||
{659, 200}, {110, 200}, {659, 200}, {110, 200},
|
||||
{659, 200}, {110, 200}, {698, 140}, {110, 100},
|
||||
{523, 60}, {110, 100}, {415, 200}, {110, 200},
|
||||
{349, 140}, {110, 100}, {523, 60}, {110, 100},
|
||||
{440, 200}, {110, 200}
|
||||
} ;
|
||||
|
||||
for (int i=0; i<36 ; i++) {
|
||||
IoDoTone(Score[i].tone, Score[i].time);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue