From af20cab109e3a35f05b616c249a1e9fba236de06 Mon Sep 17 00:00:00 2001 From: stevenhowes <38082088+stevenhowes@users.noreply.github.com> Date: Thu, 18 Mar 2021 22:11:51 +0000 Subject: [PATCH] Initial Commit of begging of port of TheEscape to C --- !Run,feb | 5 ++ !RunImage,ff8 | Bin 0 -> 4444 bytes !Sprites,ff9 | Bin 0 -> 736 bytes !Sprites22,ff9 | Bin 0 -> 1892 bytes Makefile,fe1 | 55 +++++++++++++++++++ Spr,ff9 | Bin 0 -> 92132 bytes c/CTheEscape | 99 ++++++++++++++++++++++++++++++++++ c/Graphics | 80 +++++++++++++++++++++++++++ c/Sound | 143 +++++++++++++++++++++++++++++++++++++++++++++++++ h/Sound | 8 +++ 10 files changed, 390 insertions(+) create mode 100644 !Run,feb create mode 100644 !RunImage,ff8 create mode 100644 !Sprites,ff9 create mode 100644 !Sprites22,ff9 create mode 100644 Makefile,fe1 create mode 100644 Spr,ff9 create mode 100644 c/CTheEscape create mode 100644 c/Graphics create mode 100644 c/Sound create mode 100644 h/Sound diff --git a/!Run,feb b/!Run,feb new file mode 100644 index 0000000..b5bada1 --- /dev/null +++ b/!Run,feb @@ -0,0 +1,5 @@ +Set TheEscape$Dir +IconSprites .!Sprites +WimpSlot -min 512k -max 512k +Dir +Run .!RunImage \ No newline at end of file diff --git a/!RunImage,ff8 b/!RunImage,ff8 new file mode 100644 index 0000000000000000000000000000000000000000..765442827b3e45d07784048fcc85996d1ae3c38d GIT binary patch literal 4444 zcmeHJe{36f6@O3r8y?PMq!DloQ!`8>zo zjEndWi9dSM)AxJt^WOWu_rCAFJ0dMcAdzVCyp0yu5G~D1L=jqfyyfYQy0TWJUq4v1 zSaI}GU5t+E#WazSqT3Bcp0EV5#B7L8lu!; zta~2#kAZETy}{`O&G5Hi2blG*lY&9p=2ah3r#pMyDo?E-HL^b4SW2r{o_ z$&@N9ce(?-t7$(vAafy0CJ!>~YcqHoc4+1v;ODaNOkF$xUIWgtA(qD=^KzCcyGjeOC9)i z;9+gV+EPo@jJ28h*a!Uwsn^r(=NXdedwW*j@37JAbMSLLX=V^>KK$qT^w)nT7bTjq z+!V2fxCej}d~ECMr+Eylo`A>OKG4_S9rO*bZH%$hOnLk22Q%e<*v3qWt%mMf>XhY_ zwAdONiC^oRvI;OGoZ#D1w$Gr{-KOL|V>yUkK`vvp@Z*8>xm{Ra`{n12yw&@r^N8Na zc_t>A;?SzZcl=ac719K?ZRpGBV4D*Co(b3!JALAmj{bk~_P5d~(%* z><7?)781|G;36 z*S|R^_j-DI0tem)VYy#kxfgl=U}vYVABV`Ad0N_t_(B%RA!|b3X!#HW=J~>=DB_(D z8{bzpS`;0!yir~!ET=ML6wpwd??|L+ONv%n4yDPs0$ub$Di_Z{zi~I}u9D~>tW8YV zH)Cza`Y_fOChWIj-HMgJBcjB26SAB#Y63MD%F0!v;Gk0Y$~e~?`|JdXAPH2B^Yd22 z=K|FjfSwC}+u>((+Ao5=UhtoWodHgA`+-1jUtpj+*d6e<`+9u6K7X*iug7x)X-U^? zG1VjpJyD8pp+sjb&J~|8V!v|!*_02ZcxOLmaFzq-P}jP|V>s&s&Pw%%tefQ=Tdk_w zYeTv~s-dE;NglHPo=m<`v^*2rhr3f;I1hcH=#ZsJi&|A(jv}s~gms4;wpPIo>x$7Z zzRlsdL$0=*u4>4hvJ~|naTzvljm_)ZKX{PJ(=jPoJ-$<**)sG>7tb4)W`^DHUl`VD z%`u&540hdS0nr6f38D9&iHpdGNZ(5k?ztFxd!XmMe9{nH!-!|6xrA5*@D;@0hWKm# z>r+To_j$L-RrOxEssXgJ79wMpk!L4*j`MPBJi+b*hw1%z-p-0gMm(Yiy69QK?b02t zaf|(0erfN|yPinLCOoB+6tVKCHFgKlFNj*rRfw?^d3Cy#gwu^Xz)Dz)X)gX`GP&sB z7-<;)G{>z>tc!>hb`vZ9p>=&kn2)#2y7!1?1?e*Gr_uOOJN}(IFjJ6gv5#lVWs9VX z)@J06 z)%klzQq&^UqJvHv4XE3E8cX~Ev%i{ao9mWFO9=JG|BBon{I7T#IQQ?bu=4ldi3y?? zG2@1Z`5Rzc5-^+JSp$7VPsLAe-CS2RYQ#NkbC)R`((KeRUe@B%V)Wg;?WmK(WWuFUUAZ>0emS^q*BxUbu^Y*@d4x>ifFOZ0^3#Kt8TyhkI8kU z!dK*-&n5bzDJq&h*f>?@ZJjD}C=W}bGE|aJnz;eKk~-H#=r>Z1S|V)m+!Lj+LHtiG zAJtv8Q`QZfU!C#&V7BiwF%oJLN8vvSbMf^=haN=VkOUj3wIU*v_-@QjdgLbZwJc9r zq7pW2N|SDvLa5niuQfN$#4tG?!N2(yN9)*iyZe~#XboM*oi99yn#|;64mD7!h747B zHm(Zc)a)36Uv8oW?$H9oBO>pqn6M{0fjj0r%*BO2Pa>x^iF2s$RJ^vDLgH!U{{4PF1=|8@hE5ViLHo`UeRY!O_sTopIlo6=Ml;}1)s;HnZyxh955M!w zW1N=Z+ikj?gWEOme_I0|L7Q@~>Q56r2~t7)@C^7F=n`li^uK&~p1gjX=nCjfkPf;A Uii6$)ErV`=-T~bN(NjeK0)Mqwy8r+H literal 0 HcmV?d00001 diff --git a/!Sprites,ff9 b/!Sprites,ff9 new file mode 100644 index 0000000000000000000000000000000000000000..5de963b4433189f9d29fedd6f4cb4250de446890 GIT binary patch literal 736 zcma)&!3x4K42Cliya@9Z%w-qxon#Dl6cu_KKBP||p3B}~{z=oWiYo@vq+kCuO)DbW z!Cxz)2Ylb&`mVdSr*lVZJ42ui`~bgKL|a5>*2E-Zd@)#N4fB`IduDzPN<*!O3G-g4 zGC@Z$Mg&YukO_q)nF&iwORd=M3mtHf^$><@Gv=@nga^sYTI(>EAU`xRUt~HImYK!r z0Z|NHv@s^rG^Mn*tjxw#5p{^LP>lq)D9}ZyvKgs#iRCg8itbKBPPZ0nB literal 0 HcmV?d00001 diff --git a/!Sprites22,ff9 b/!Sprites22,ff9 new file mode 100644 index 0000000000000000000000000000000000000000..6c40a52f4516ef8d461e9237b6b94b18d0117f6c GIT binary patch literal 1892 zcmbu9v1-FG5Qf!|(lIUc1)?QO$>Jef-=%~=mO@DiUP_;`W2a>BCj18O|KI6!PNI}T z1-Acu`tMHGDV~H7?s0AJLio51VZMIfZZ`Y%%iAVQ!RNR*Fdd$7eN94m#Iwy~Z{l~h zYA$_sW(hrC)6|$HEWYQaX+E_|W?dpnNvN_e2|Fqj29#iHz~~ePDGb3WDWlEVr})TN z!h#t~o3kXo3iEVaAu1#G8q;*SNcNpG)*UmeE34xT^R{MTbn}I|W)vpF4)CU|)pU~f znD?OVSb`gcr|ng{0s~?&wx9Xh7D$^WO*UqI@j;j|vz`b;!tuoV3@H@mNT4v>e1rf!isa1f zD)Tr|;;XQ6RZh=v{fDv6cwDRd=l3{GsC#e{j9o>+lRf1xWw>k8q{+rgA1xMdY=@?I zW;P@%baK0`S{{98y+}|Vc*^Le>DsuMHfu_ZyylwbyY{?k xA5OIFV&<-S5_3QFP>#>LYB)F~r^-uxEtWy-yxvgA`X`;wz2t&1#G~?D{{WgIczyr? literal 0 HcmV?d00001 diff --git a/Makefile,fe1 b/Makefile,fe1 new file mode 100644 index 0000000..11c7902 --- /dev/null +++ b/Makefile,fe1 @@ -0,0 +1,55 @@ +# Project: CTheEscape + + +# Toolflags: +CCflags = -c -depend !Depend -IC: -throwback -w +Linkflags = -aif -o $@ +#ObjAsmflags = -depend !Depend -Stamp -quit -CloseExec +#CMHGflags = +#LibFileflags = -c -o $@ +#Squeezeflags = -o $@ + + +# Final targets: +@.!RunImage: @.o.CTheEscape @.o.Graphics @.o.Sound C:o.stubs + Link $(Linkflags) @.o.CTheEscape @.o.Graphics @.o.Sound C:o.stubs + + +# User-editable dependencies: + + +# Static dependencies: +@.o.CTheEscape: @.c.CTheEscape + cc $(ccflags) -o @.o.CTheEscape @.c.CTheEscape + +@.o.Graphics: @.c.Graphics + cc $(ccflags) -o @.o.Graphics @.c.Graphics + +@.o.Sound: @.c.Sound + cc $(ccflags) -o @.o.Sound @.c.Sound + +# Dynamic dependencies: +o.CTheEscape: c.CTheEscape +o.CTheEscape: C:h.swis +o.CTheEscape: C:h.kernel +o.CTheEscape: C:h.kernel +o.CTheEscape: h.Sound +o.CTheEscape: c.CTheEscape +o.CTheEscape: C:h.swis +o.CTheEscape: C:h.kernel +o.CTheEscape: C:h.kernel +o.CTheEscape: h.Sound +o.Graphics: c.Graphics +o.Graphics: C:h.swis +o.Graphics: C:h.kernel +o.Graphics: C:h.kernel +o.Sound: c.Sound +o.Sound: C:h.swis +o.Sound: C:h.kernel +o.Sound: C:h.kernel +o.Sound: h.Sound +o.Sound: c.Sound +o.Sound: C:h.swis +o.Sound: C:h.kernel +o.Sound: C:h.kernel +o.Sound: h.Sound diff --git a/Spr,ff9 b/Spr,ff9 new file mode 100644 index 0000000000000000000000000000000000000000..bded19b3d8770b198ac736191d96b95cd7407118 GIT binary patch literal 92132 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 literal 0 HcmV?d00001 diff --git a/c/CTheEscape b/c/CTheEscape new file mode 100644 index 0000000..46497aa --- /dev/null +++ b/c/CTheEscape @@ -0,0 +1,99 @@ +#include +#include "swis.h" +#include +#include +#include "Sound.h" + +// SWI Registers +_kernel_swi_regs inreg; +_kernel_swi_regs outreg; + +// Sprite buffer +unsigned char *buffer; + +extern struct CompositionElement composition[128]; + +void intro() +{ + int currentstart = 0; + + sound_voices(4); + + sound_set_voice(1,"WaveSynth-Beep"); + sound_set_voice(2,"WaveSynth-Beep"); + sound_set_voice(3,"WaveSynth-Beep"); + sound_set_voice(4,"WaveSynth-Beep"); + sound_composition_init(); + + // DUn, dun, daan duhhn + sound_composition_element_add(currentstart,1,sound_note("A4#"),200); + sound_composition_element_add(currentstart,2,sound_note("A5#"),200); + currentstart += 200; + sound_composition_element_add(currentstart,1,sound_note("F3"),200); + sound_composition_element_add(currentstart,2,sound_note("F4"),200); + currentstart += 200; + sound_composition_element_add(currentstart,1,sound_note("G3#"),200); + sound_composition_element_add(currentstart,2,sound_note("G4#"),200); + currentstart += 200; + sound_composition_element_add(currentstart,1,sound_note("C3"),200); + sound_composition_element_add(currentstart,2,sound_note("C4"),200); + currentstart += 200; + + // DUn, dun, daan duhhn + sound_composition_element_add(currentstart,1,sound_note("A3#"),200); + sound_composition_element_add(currentstart,2,sound_note("A4#"),200); + currentstart += 200; + sound_composition_element_add(currentstart,1,sound_note("F2"),200); + currentstart += 200; + sound_composition_element_add(currentstart,2,sound_note("G2#"),200); + currentstart += 200; + sound_composition_element_add(currentstart,1,sound_note("C2"),200); + currentstart += 250; + + // Duh + sound_composition_element_add(currentstart,3,sound_note("A3#"),300); + sound_composition_element_add(currentstart,4,sound_note("A2#"),300); + currentstart += 200; + + //REM Dun De Da + sound_composition_element_add(currentstart,1,sound_note("F1"),20); + currentstart += 50; + sound_composition_element_add(currentstart,2,sound_note("A2#"),5); + currentstart += 20; + sound_composition_element_add(currentstart,1,sound_note("D2#"),200); + currentstart += 180; + + + sound_composition_element_add(currentstart,2,sound_note("D2"),50); + currentstart += 50; + sound_composition_element_add(currentstart,1,sound_note("A2#"),30); + currentstart += 30; + sound_composition_element_add(currentstart,2,sound_note("G1"),50); + currentstart += 50; + sound_composition_element_add(currentstart,1,sound_note("C2"),50); + currentstart += 50; + sound_composition_element_add(currentstart,3,sound_note("A2#"),100); + sound_composition_element_add(currentstart,4,sound_note("F2"),100); + currentstart += 100; + + draw_sprite("tng",320,400); + + sound_composition_start(clock()); + + while(sound_composition_incomplete()) + sound_composition_tick(clock()); +} + +int main(int argc, char *argv[]) +{ + sound_on(); + + display_mode(28); + load_sprites("Spr"); + + intro(); + + free(buffer); + + return 0; +} diff --git a/c/Graphics b/c/Graphics new file mode 100644 index 0000000..b4071dc --- /dev/null +++ b/c/Graphics @@ -0,0 +1,80 @@ +#include +#include "swis.h" +#include + +// SWI Registers +extern _kernel_swi_regs inreg; +extern _kernel_swi_regs outreg; + +extern unsigned char *buffer; + + +// Loads sprite file into buffer +void load_sprites(char* filename) +{ + int length; + + // Attempt to get file info + inreg.r[0] = 13; + inreg.r[1] = (int) filename; + _kernel_swi(OS_File,&inreg,&outreg); + + // Length will be in R4 if it exists + length = outreg.r[4]; + + // If it's <1 it's fil not found + if(outreg.r[0] < 1) + { + printf("Sprite file %s not found",filename); + exit(0); + } + + // Stops us trying to mallocsomething mad if file is too big. + if(length > 200000) + { + printf("Sprite file %s seems unreasonably large at %i bytes",filename, length); + exit(0); + } + + // Attempt malloc, die if we cant + buffer = (unsigned char *) malloc(length + 4); + + if(buffer==NULL) + { + printf("Couldn't malloc %i bytes for sprite buffer",length); + exit(0); + } + + // Store size and other info as required for SpriteOp 9 to init sprite area + *(unsigned int *)buffer = length + 4; + *(unsigned int *)(buffer + 4) = 16; + inreg.r[0] = 256+9; + inreg.r[1] = (unsigned int) buffer; + _kernel_swi(OS_SpriteOp,&inreg,&outreg); + + // Load sprite file into buffer + inreg.r[0] = 256+10; + inreg.r[1] = (int) buffer; + inreg.r[2] = (int) filename; + _kernel_swi(OS_SpriteOp,&inreg,&outreg); +} + +void display_mode(int mode) +{ + // mode 28 80x60 640x480 16 colours + inreg.r[0] = 0; + inreg.r[1] = mode; + _kernel_swi(OS_ScreenMode,&inreg,&outreg); +} + +void draw_sprite(char* spritename,int x, int y) +{ + // SpriteOp 34 to put sprite at a location + inreg.r[0] = 256+34; + inreg.r[1] = (int) buffer; + inreg.r[2] = (int) spritename; + inreg.r[3] = x; + inreg.r[4] = y; + inreg.r[5] = 8; // GCOL dest=source and sprite mask + _kernel_swi(OS_SpriteOp,&inreg,&outreg); +} diff --git a/c/Sound b/c/Sound new file mode 100644 index 0000000..50f09af --- /dev/null +++ b/c/Sound @@ -0,0 +1,143 @@ +#include +#include "swis.h" +#include +#include "Sound.h" + +// SWI Registers +extern _kernel_swi_regs inreg; +extern _kernel_swi_regs outreg; + +int current_element = 0; +int current_playback_element = 0; +int composition_startcent = -1; + +struct CompositionElement composition[COMPOSITION_MAX]; + +char *notes[] = {"AX","A#","BX","CX","C#","DX","D#","EX","FX","F#","GX","G#"}; + +void sound_on() +{ + inreg.r[0] = 2; + _kernel_swi(Sound_Enable,&inreg,&outreg); +} + +void sound_voices(int num) +{ + inreg.r[0] = num; + inreg.r[1] = 0; + inreg.r[2] = 0; + inreg.r[3] = 0; + inreg.r[4] = 0; + _kernel_swi(Sound_Configure,&inreg,&outreg); +} + +void sound_set_voice(int voicenum, char* voicename) +{ + inreg.r[0] = voicenum; + inreg.r[1] = (int) voicename; + _kernel_swi(Sound_AttachNamedVoice,&inreg,&outreg); +} + +void sound_composition_element_play(struct CompositionElement element) +{ + inreg.r[0] = element.Channel; + inreg.r[1] = element.Volume; + inreg.r[2] = element.Note; + inreg.r[3] = element.Length; + _kernel_swi(Sound_Control,&inreg,&outreg); +} + +void sound_composition_init() +{ + int i; + for(i = 0; i <= COMPOSITION_MAX; i++) + { + composition[i].Start = -1; + } +} + +void sound_composition_element_add(int start, int channel, int note, int length) +{ + composition[current_element].Start = start; + composition[current_element].Note = note; + composition[current_element].Volume = -10; + composition[current_element].Channel = channel; + composition[current_element].Length = length; + current_element++; +} + +void sound_composition_debug() +{ + int i; + + printf("------------------------------\n"); + + for(i = 0; i <= COMPOSITION_MAX; i++) + { + if(composition[i].Start >= 0) + { + printf("%5d: %3d %4d %3d %4d\n", + composition[i].Start, + composition[i].Note, + composition[i].Volume, + composition[i].Channel, + composition[i].Length + ); + } + } + + printf("------------------------------\n"); +} + +void sound_composition_start(int cent) +{ + composition_startcent = cent; +} + +void sound_composition_tick(int cents) +{ + int offset_cents = cents - composition_startcent; + int i; + + for(i = current_playback_element; i <= COMPOSITION_MAX; i++) + { + if(composition[i].Start <= offset_cents) + { + if(composition[i].Start >= 0) + { + sound_composition_element_play(composition[i]); + current_playback_element = i + 1; + } + } + } +} + +int sound_note(char* note) +{ + int octave = note[1] - 48; + char *basenote = "ZZ"; + int index = 1; + int indexi = 0; + int len = sizeof(notes)/sizeof(notes[0]); + basenote[0] = note[0]; + if(strlen(note) == 3) + { + basenote[1] = '#'; + }else{ + basenote[1] = 'X'; + } + for(indexi = 0; indexi < len; indexi++) + { + if(strcmp(notes[indexi],basenote) == 0) + index = indexi; + } + return 41 + (4 * index) + ((octave - 2) * 48); +} + +int sound_composition_incomplete() +{ + if(composition[current_playback_element].Start < 0) + return 0; + else + return 1; +} diff --git a/h/Sound b/h/Sound new file mode 100644 index 0000000..805ffe5 --- /dev/null +++ b/h/Sound @@ -0,0 +1,8 @@ +#define COMPOSITION_MAX 128 +struct CompositionElement { +int Start; +int Note; +int Volume; +int Channel; +int Length; +};