From 6718b47ac54c26b5390df9beb7a456d71c02d173 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Thu, 31 Aug 2017 16:18:45 -0500 Subject: [PATCH] worked on SD abit so the irq0 is not needed in imfplay anymore. I will need to merge ID_SD with p16 and use opl2 and PC speaker parts of SD. i found an adlib catcher and it records it to a RAW format file. it is called rac and it is located in 16/rac --- 16/rac/D-INFO.TXT | 199 ++++++++++++++++++++++++++++++++ 16/rac/FILE_ID.DIZ | 14 +++ 16/rac/RAC.DOC | 202 +++++++++++++++++++++++++++++++++ 16/rac/RAC.EXE | Bin 0 -> 8598 bytes 16/rac/RAC.REV | 3 + 16/rac001a.zip | Bin 0 -> 15391 bytes makefile | 3 - src/i0fplay.c | 231 -------------------------------------- src/imfplay.c | 181 +---------------------------- src/lib/.16_sd.h.kate-swp | Bin 0 -> 68 bytes src/lib/16_sd.c | 66 +++++++---- src/lib/16_sd.h | 2 + src/lib/16_tdef.h | 1 + src/util/z.sh | 4 +- 14 files changed, 470 insertions(+), 436 deletions(-) create mode 100755 16/rac/D-INFO.TXT create mode 100755 16/rac/FILE_ID.DIZ create mode 100755 16/rac/RAC.DOC create mode 100755 16/rac/RAC.EXE create mode 100755 16/rac/RAC.REV create mode 100755 16/rac001a.zip delete mode 100755 src/i0fplay.c create mode 100755 src/lib/.16_sd.h.kate-swp diff --git a/16/rac/D-INFO.TXT b/16/rac/D-INFO.TXT new file mode 100755 index 00000000..b4412127 --- /dev/null +++ b/16/rac/D-INFO.TXT @@ -0,0 +1,199 @@ + + + * * + * * * + * * * + ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ + ÛÛÛÛÛÛÜ ßßß ÛÛÜ ÜÛÛ ÛÛÛßßß ÛÛÛÜÛ Û ÜÜÜÛÜÜÜÛ Ü Û ßÛ ÛÛ + ÛÛÛ ÛÛÛ ÛÛÛ ÛÛÛÛÛÛÛÛ ÛÛÛßß ÛÛÛÛ Û Û Û Û Û Ü ÛÛ + ÛÛÛ ÛÛÛ ÛÛÛ ÛÛÛÞÝÛÛÛ ÛÛÛ ÛÛÛ Û ÛÛÛÛ Û Û Û Û ÛÛ ÛÛ + ÛÛÛ ÛÛÛ ÛÛÛ ÛÛÛ ÛÛÛ ÛÛÛ ÛÛÛ Û ÛÛÛÛ Û Û Û Û ÛÛ ÛÛ + ÛÛÛÛÛÛß ÛÛÛ ÛÛÛ ÛÛÛ ÛÛÛÛÛÛ ÛÛÛ Û Û Û Û Û ÛÛ ÛÛ + ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß + + + ? t h e p o w e r s + ------------------------------------------------------------------------------ + + assassin the druid + rdos the mage + ondar he is a bartender + haberman it might be that. + + + + I t h e i d e a + ------------------------------------------------------------------------------ + + we are a couple of friends knowing each other for years, working together on + software projects nowadays. we all are busy studying yet, so don't expect a + bunch of new releases every month. our goal is to deliver quality productions + on both pc-demo / pc-commercial scene time by time. + + +  p r o d u c t i o n s + ------------------------------------------------------------------------------ + + [ important releases in 1995 ] + + rumb117i.zip* 55kb jun memory manager, gives you upper memory without + protected mode masters such as qemm / emm386 + + rumb118i.zip* 60kb sep updated version (more boards as well) + + rumb119i.zip* 57kb dec next updated version. man this look so serious. + + + [ important releases in 1996 ] + + rumb11dc.zip* 54kb jun a new one with more boards support + + + [ important releases in 1997 ] + + rumb11ea.zip 54kb jan another new version, now not only demo!!! + + * marked product is commercial or shareware - expect only partialy working + demo-version in this free package. + + +-------------------------------------------------------------------------------- + IMPORTANT NOTE TO ALL DISTRIBUTORS OF OUR PRODUCTS! PLEASE REMOVE EVERY + OUR SINGLE PRODUCTION NOT MENTIONED IN THIS LIST FROM YOUR BOARD. IT IS + NO MORE OFFICIAL RELEASE OF US (WE SHAME FOR IT :-). THANK YOU ... +-------------------------------------------------------------------------------- + + + +  b u l l e t i n b o a r d s + ------------------------------------------------------------------------------ + get our productions on these sites worldwide. + ( alphabetical order ) + + a.c.e. +33-1-45887-5484 28k8 france, hq gandalf + a touch of eternity +46-18-240037 28k8 sweden, hq drain + count zero +47-5512-2962 28k8 norway yitzhaq, calvin + digital fuse +32-2-7570-776 28k8 belgium, hq dr.vibe, mmouse + genesis +32-2-2453-498 28k8 belgium, ehq darkness + mostly harmless +46-8-6369-011 28k8 sweden thefreak + shoebox universe #1 +43-1-8928-998 33k6 austria eliot + shoebox universe #2 +43-1-8924-204 14k4 reebok + space bar +47-6493-3499 33k6 norway, hq hybris + surfers dream +46-(0)300-21883 28k8 sweden balrog + velvet demosite +32-3-38515-94 28k8 belgium sdog + + please contact us, if you want to become our site and/or hq. send us some bbs + info and your personalities. you have to include your bbs advertisement, too. + + + + ð i n t e r n e t + ------------------------------------------------------------------------------ + every our single release is also available on the net. + + ftp://sorry.vse.cz/dimension + http://sorry.vse.cz/dimension + + + tunes released by assassin for tm (three musicians) available on: + + ftp://fm.org/pub/music/tm + + + you may also visit the file section of ircbot _gore on #daskmig + + directory: /dimension + + +  t o u c h u s + ------------------------------------------------------------------------------ + contact our team using the following ways. + + + internet email: + + dv@pf.jcu.cz (general requests, commercials..) + dv@pf.jcu.cz (assassin) + roman@sorry.vse.cz (rdos, rdosumb, rdosplay, remus etc.) + xstao02@sorry.vse.cz (ondar) + xkovacic@dinf.fst.cvut.cz (haberman fans) + + snail mail: + + (assassin) (rdos) (ondar) (haberman) + david voracek roman dolejsi ondrej stasek jiri kovacicin + branisovska 50 husova 419 j.dietricha 4 xxxxmovingxxxx + 370 05 c budejovice 373 82 vcelna 370 08 c budejovice xxxxmovingxxxx + czech republic czech republic czech republic czech republic + + internet relay chat: + + meet us on irc channels #daskmig and #coders, or leave a note for assassin + on ircbot _gore present on #daskmig. + + +  g r e e t i n g s + ------------------------------------------------------------------------------ + + + ÛÛßßÛÜ from assassin + ÛÛ ÛÛ + ÛÛÜÜÛß rain, axl, asyntote, balrog, moebius, basehead, necros + sunday, zodiak, recc, cutnpaste, dune, derpiipo, vic, mellow-d + spinny, charon, gandalf, pellicus, pit bull, naali, lemming, aap + fuckeer, reebok, hybris, lizardking, naali, pelusa, nahkamuum + primon, beatnik, hachazo, distance, thefear, skaven, sleeping dog + alex dusty, darkness, laser harp, big jim, sikamikanico, wizard + eliott, tdj, leviathan, desmond, jare, tmk, hoplite, jmag + mikmak, hachazo, svarvarn, ryan cramer, miss saigon, perex + zden, thefreak, marwin and _garbage_obvious_rumourspreading_elk. + ( plus everyone i may forgot to mention... ) + + + ÜÛßßÛÜ from rdos + ÛÛßßÛÛ + ÛÛ ÛÛ lfatip, charon, jetman, fuckeer, tom, jap, perex, + rum, piitr, desmond, hachazo, deejay, bohunka, ludek, ivo, + some of his school mates plus contacts and kavon of course + + + ÛÛÜÜÛÛ from ondar + ÛÛÞÝÛÛ + ÛÛ ÛÛ y sister eva, dolphine, rum, mr.error, piitr + charon, perex, buusaci, jetman, kavon, desmond, hachazo + jana, fuckeer, pelusa, filip, alfatip, vasek, honza, + kaja, and vojta + + + ÛÛÜ ÛÛ from haberman + ÛÛßÛÛÛ + ÛÛ ÛÛ op + + + + t h a n k y o u + ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + f o r b e i n g o u r s f o r a w h i l e . . + + + + + + + + + + + + + + + + + + + + + + +.10-29-96 \ No newline at end of file diff --git a/16/rac/FILE_ID.DIZ b/16/rac/FILE_ID.DIZ new file mode 100755 index 00000000..32e9ee51 --- /dev/null +++ b/16/rac/FILE_ID.DIZ @@ -0,0 +1,14 @@ +ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸ +³ D I M E N S I O N ³ +³ presents ³ +³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij +³ R A C ³ +³ version 0.01a ³ +³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij +³OPL2/3 music module grabber³ +³for your ears. FIRST generic³ +³adlib grabber in PC world at³ +³all. Coded in pure assembler.³ +³ Cooperates with RdosPlay. ³ +³ T R Y Y O U R S E L F.. ³ +ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ; diff --git a/16/rac/RAC.DOC b/16/rac/RAC.DOC new file mode 100755 index 00000000..c04505b6 --- /dev/null +++ b/16/rac/RAC.DOC @@ -0,0 +1,202 @@ + ÂÂÄÄ¿ ÂÂÄÄ¿ ÚÂÄÄ¿ + ³³ ³ ³³ ³ ³³ + ³ÃÄÂÙ ³ÃÄÄ´ ³³ + ³³ À¿ ³³ ³ ³³ + ÀÙ À ÀÙ Á ÀÁÄÄÙ + ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + Written by Roman Dolejsi (RDOS / DIMENSION) + + December 31, 1996 + Last update: December 31, 1996 + + + This is the documentation belonging to and explaining the use of + + RAC version 0.01a + OPL2/OPL3 music module grabber for MS-DOS + + + TOPICS covered in this document: + + DISCLAIMER + APOLOGIZE + PURPOSE OF RAC + REQUIREMENTS + INSTALLATION OF RAC + RAC IN ACTION + DIALOG LINE + FREQUENTLY ASKED QUESTIONS + COPYRIGHT + WHERE TO FIND RAC + THANX + CONTACTING ME + + +DISCLAIMER: +----------- + Although RAC has been tested on several systems, I cannot guarantee that it +is bugless. Therefore I do not take responsibility for any damage directly or +indirectly caused by RAC as a result of known/unknown errors in it or errors +caused by its access to your devices. + + +APOLOGIZE: +---------- + Sorry, english is not my native language. However, I wrote this nice docy in +english without any help. I APOLOGIZE for any mistakes in the document. Take it +easy... Nobody is perfect.. :-) + + +PURPOSE OF RAC: +--------------- + Rdos Adlib Catcher is an OPL2/OPL3 music module grabber for IBM PC compatible +computers running MS-DOS operating system. This means that you can use it for +grabbing your favorite melody from some music player / demo or game. I've coded +it because of lack of any such grabber of this type in PC-world. + + +REQUIREMENTS: +------------- + RAC is coded in protected mode 386-assembler. For grabbing you will need 386 +or compatible computer without memory manager installed and adlib card. Grabbed +music can be replayed with RdosPlay (RDOS OPL Player). + + +INSTALLATION OF RAC: +-------------------- +- first you have to make some directory on your drive. Then you have to unpack + there archive file RACxyyz.ZIP. + (you probably did all this when you read these lines :-) + +- RAC pack should consist of these files: + + RAC.EXE - Main file - OPL grabber + RAC.DOC - Documentation for RAC (this file) + RAC.REV - RAC changes/revision history file + FILE_ID.DIZ - quick info file + +- now you have RAC successfully installed :-) + + +RAC IN ACTION: +-------------- + RAC can store all acesses to Adlib (OPL2) or some OPL3 card's I/O ports into +special file with RAW extension. That file can be later played with something +capable of playing that (hint: what about RdosPlay?). + After you start RAC, it initializes internal music buffer. Every access to +desired ports will be stored it that buffer. Therefore you have to run some +game, demo or player which uses adlib. When you later want to save buffer in +file or clear it you have to run RAC again with special parameter. + + +DIALOG LINE: +------------ +Dialog line looks as follows: + RAC.EXE [c] [s] + + possibilities: + c - clear music buffer + s - save music buffer into file RACDATA.RAW in this directory + + +RAW FILE SPECIFICATIONS: +------------------------ +RAW is originally founded probably by Future Crew demogroup which used it in +their BBS intro StarPort. RAW file generated by RAC is a derived version +which is also capable of OPL3 extension (ie. full four port access: 388-38Bh). +RAW files can be played with RdosPlay (look at Dimension homepage). + +format: [0]=db 'RAWADATA' ... file identifier + [8]=dw clock ... clock speed (like c-20) + [10]=dw data_size dup (data) ... adlib data + [..]=dw 0ffffh ... end of file +data: parameter, command. command==0: data==n ... wait n times. + command==2: data==0 ... set speed (next word) + command==2: data==1 ... set OPL3 port A default + command==2: data==2 ... set OPL3 port B default + + +FREQUENTLY ASKED QUESTIONS: +--------------------------- +* RAC does not want to run with PM driver (EMM386/QEMM/Win) installed. + - RAC uses clear 32-bit PM manager. It needs completely free environment + to operate. Therefore other PM managers will NEVER be supported. + What RAC uses is from the beginning meant as a complete memory manager + so it's internal functionality is absolutely incompatible with anything + other (even VCPI's ProtMode level 0). + +* Coprocessor seems not to be installed when RAC is running !! Why !?! + - I have to agree.. sorry for this.. still don't know why.. Maybe another + version... really sorry. + +* When I install RAC there is no EMS memory in system. Some of my programs + don't want to run at all. + - EMS services are not yet supported, sorry. Maybe another version.. + +* My application told me I have no VCPI compatible environment and refused + to run when I started it under RAC. +* My application refused to run with exit message about impossibility to enter + DPMI protected mode. + - VCPI/DPMI are 32-bit Protected mode interfaces allowing your applications + to run 32-bit code under other 32-bit PM environment installed in memory. + Although these ifaces are not yet supported, there exist light of hope + that DPMI will be supported some day. + +* How much system memory takes RAC for its work ? + - RAC takes about 1k of conventional mem. In fact, everything is in + Xmemory (above 1MB) and takes there about 550kB. But Xmemory requirements + probably don't bother anyone. + +* Programs tend to be slower under RAC. + - Yes, especially Adlib playing routines are slower, because PM exception + handling eats some of the system resources. + +* Are there any other known problems with RAC ? + - RAC counts waitstates via timer. When some music does not use timer for + playing (not such often case), RAC won't insert waitstates in generated + RAW file - file is not playable :-( Don't know any solution right now. + + +WHERE TO FIND RAC: +------------------ +Each time I have a new version of RAC available, I'll upload it to this place: + + ftp://sorry.vse.cz/dimension (Dimension FTP site in Prague, Czech Republic) + http://sorry.vse.cz/dimension (Dimension Inet HeadQuarters, Czech Republic) + +RAC will be probably also available at ftp.cdrom.com or ftp.sunet.se +FTP archives. + + Ask your local Internet or FTP expert on how to reach them. + +Another way is to visit RAC's homepage at address: + + http://sorry.vse.cz/dimension/rdos/rac (Http site in Prague, CZE) + + +THANX: +------ +Although I did all the programming, there is a friend which helped me: + +David Voracek (Assassin/Dimension) - idea, testing, suggestions + +and other friends for their (mostly) betatesting.. + + +CONTACTING ME: +-------------- + If you want to contact me, write to address listed below. If you want to send +me suggestions, tips or simply greets, send it freely. Also some money would be +good as a power and motivation for further work :-) + +My address: E-Mail: (non-commercial) + Roman Dolejsi (RDOS) roman@sorry.vse.cz + Husova 419, Vcelna roman@romeo.pf.jcu.cz + 37382 Ceske Budejovice + Czech Republic + +Please do not send me E-mails longer than 150kB (because of our local smtp +server limit). + +*** end of RAC documentation *** \ No newline at end of file diff --git a/16/rac/RAC.EXE b/16/rac/RAC.EXE new file mode 100755 index 0000000000000000000000000000000000000000..b2ba22d5e1db83f1d2d81ab398ae48ded1f02866 GIT binary patch literal 8598 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 literal 0 HcmV?d00001 diff --git a/16/rac/RAC.REV b/16/rac/RAC.REV new file mode 100755 index 00000000..c6d56042 --- /dev/null +++ b/16/rac/RAC.REV @@ -0,0 +1,3 @@ +RAC version 0.01a - 9th September 1996 +- initial revision (RPMMM ver 0.02: 1k ConvMemory, 550k Xmemory) + - no control keys \ No newline at end of file diff --git a/16/rac001a.zip b/16/rac001a.zip new file mode 100755 index 0000000000000000000000000000000000000000..2958c1451085f6918ed3c99f35cf0251844755a1 GIT binary patch literal 15391 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 literal 0 HcmV?d00001 diff --git a/makefile b/makefile index 8a8bd909..b24edb2f 100755 --- a/makefile +++ b/makefile @@ -211,7 +211,6 @@ TESTEXEC = & 0tesuto.exe & maptest.exe & imfplay.exe & - i0fplay.exe & vrldbg.exe #zcroll.exe & TESTEXEC2 = & @@ -292,7 +291,6 @@ fontgfx.exe: fontgfx.$(OBJ) gfx.lib $(DOSLIB) inputest.exe: inputest.$(OBJ) $(16LIB) $(DOSLIB) gfx.lib sountest.exe: sountest.$(OBJ) $(16LIB) $(DOSLIB) gfx.lib imfplay.exe: imfplay.$(OBJ) $(16LIB) $(DOSLIB) gfx.lib -i0fplay.exe: i0fplay.$(OBJ) $(DOSLIB) vrldbg.exe: vrldbg.$(OBJ) #gfx.lib $(DOSLIB) pcxtest.exe: pcxtest.$(OBJ) gfx.lib $(DOSLIB) $(16LIB) vrstest.exe: vrstest.$(OBJ) $(16LIB) gfx.lib $(DOSLIB) @@ -343,7 +341,6 @@ inputest.$(OBJ):$(SRC)/inputest.c #inntest.$(OBJ):$(SRC)/inntest.c sountest.$(OBJ): $(SRC)/sountest.c imfplay.$(OBJ): $(SRC)/imfplay.c -i0fplay.$(OBJ): $(SRC)/i0fplay.c vrldbg.$(OBJ): $(SRC)/vrldbg.c #miditest.$(OBJ): $(SRC)/miditest.c #testemm.$(OBJ):$(SRC)/testemm.c diff --git a/src/i0fplay.c b/src/i0fplay.c deleted file mode 100755 index 0e67d2f1..00000000 --- a/src/i0fplay.c +++ /dev/null @@ -1,231 +0,0 @@ -/* midi.c - * - * Adlib OPL2/OPL3 FM synthesizer chipset test program. - * Play MIDI file using the OPLx synthesizer (well, poorly anyway) - * (C) 2010-2012 Jonathan Campbell. - * Hackipedia DOS library. - * - * This code is licensed under the LGPL. - * - * - * Compiles for intended target environments: - * - MS-DOS [pure DOS mode, or Windows or OS/2 DOS Box] - */ - -#include -#include /* this is where Open Watcom hides the outp() etc. functions */ -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include /* 8254 timer */ -#include -#include - -static void (interrupt *old_irq0)(); -static volatile unsigned long irq0_ticks=0; -static volatile unsigned int irq0_cnt=0,irq0_add=0,irq0_max=0; - -#pragma pack(push,1) -struct imf_entry { - uint8_t reg,data; - uint16_t delay; -}; -#pragma pack(pop) - -static struct imf_entry* imf_music=NULL; -static struct imf_entry* imf_play_ptr=NULL; -static struct imf_entry* imf_music_end=NULL; -static uint16_t imf_delay_countdown=0; - -void imf_free_music() { - if (imf_music) free(imf_music); - imf_music = imf_play_ptr = imf_music_end = NULL; - imf_delay_countdown = 0; -} - -int imf_load_music(const char *path) { - unsigned char buf[8]; - unsigned long len; - int fd; - - imf_free_music(); - - fd = open(path,O_RDONLY|O_BINARY); - if (fd < 0) return 0; - - len = lseek(fd,0,SEEK_END); - lseek(fd,0,SEEK_SET); - read(fd,buf,2); - if (buf[0] != 0 || buf[1] != 0) // type 1 IMF - len = *((uint16_t*)buf); - else - lseek(fd,0,SEEK_SET); - - if (len == 0 || len > 65535UL) { - close(fd); - return 0; - } - len -= len & 3; - - imf_music = malloc(len); - if (imf_music == NULL) { - close(fd); - return 0; - } - read(fd,imf_music,len); - close(fd); - - imf_play_ptr = imf_music; - imf_music_end = imf_music + (len >> 2UL); - return 1; -} - -/* WARNING: subroutine call in interrupt handler. make sure you compile with -zu flag for large/compact memory models */ -void interrupt irq0() { - irq0_ticks++; - if ((irq0_cnt += irq0_add) >= irq0_max) { - irq0_cnt -= irq0_max; - old_irq0(); - } - else { - p8259_OCW2(0,P8259_OCW2_NON_SPECIFIC_EOI); - } -} - -void imf_tick() { - if (imf_delay_countdown == 0) { - do { - adlib_write(imf_play_ptr->reg,imf_play_ptr->data); - imf_delay_countdown = imf_play_ptr->delay; - imf_play_ptr++; - if (imf_play_ptr == imf_music_end) - imf_play_ptr = imf_music; - } while (imf_delay_countdown == 0); - } - else { - imf_delay_countdown--; - } -} - -void adlib_shut_up() { - int i; - - memset(adlib_fm,0,sizeof(adlib_fm)); - memset(&adlib_reg_bd,0,sizeof(adlib_reg_bd)); - for (i=0;i < adlib_fm_voices;i++) { - struct adlib_fm_operator *f; - f = &adlib_fm[i].mod; - f->ch_a = f->ch_b = f->ch_c = f->ch_d = 1; - f = &adlib_fm[i].car; - f->ch_a = f->ch_b = f->ch_c = f->ch_d = 1; - } - - for (i=0;i < adlib_fm_voices;i++) { - struct adlib_fm_operator *f; - - f = &adlib_fm[i].mod; - f->mod_multiple = 1; - f->total_level = 63 - 16; - f->attack_rate = 15; - f->decay_rate = 4; - f->sustain_level = 0; - f->release_rate = 8; - f->f_number = 400; - f->sustain = 1; - f->octave = 4; - f->key_on = 0; - - f = &adlib_fm[i].car; - f->mod_multiple = 1; - f->total_level = 63 - 16; - f->attack_rate = 15; - f->decay_rate = 4; - f->sustain_level = 0; - f->release_rate = 8; - f->f_number = 0; - f->sustain = 1; - f->octave = 0; - f->key_on = 0; - } - - adlib_apply_all(); -} - -int main(int argc,char **argv) { - unsigned long tickrate = 700; - unsigned long ptick; - int c; - - printf("ADLIB FM test program IMFPLAY\n"); - if (argc < 2) { - printf("You must specify an IMF file to play\n"); - return 1; - } - - if (!init_adlib()) { - printf("Cannot init library\n"); - return 1; - } - if (!probe_8254()) { /* we need the timer to keep time with the music */ - printf("8254 timer not found\n"); - return 1; - } - - if (!imf_load_music(argv[1])) { - printf("Failed to load IMF Music\n"); - return 1; - } - - write_8254_system_timer(T8254_REF_CLOCK_HZ / tickrate); - irq0_cnt = 0; - irq0_add = 182; - irq0_max = 1000; /* about 18.2Hz */ - old_irq0 = _dos_getvect(8);/*IRQ0*/ - _dos_setvect(8,irq0); - - adlib_shut_up(); - shutdown_adlib_opl3(); // NTS: Apparently the music won't play otherwise - _cli(); - irq0_ticks = ptick = 0; - _sti(); - - while (1) { - unsigned long adv; - - _cli(); - adv = irq0_ticks - ptick; - if (adv >= 100UL) adv = 100UL; - ptick = irq0_ticks; - _sti(); - - while (adv != 0) { - imf_tick(); - adv--; - } - - if (kbhit()) { - c = getch(); - if (c == 0) c = getch() << 8; - - if (c == 27) { - break; - } - } - } - - imf_free_music(); - adlib_shut_up(); - shutdown_adlib(); - _dos_setvect(8,old_irq0); - write_8254_system_timer(0); /* back to normal 18.2Hz */ - return 0; -} - diff --git a/src/imfplay.c b/src/imfplay.c index be4c7766..563ab854 100755 --- a/src/imfplay.c +++ b/src/imfplay.c @@ -21,174 +21,11 @@ #include "src/lib/16_dbg.h" #include "src/lib/16_sd.h" -// #include -// #include /* this is where Open Watcom hides the outp() etc. functions */ -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include - extern struct glob_game_vars *ggvv; -static void (interrupt *old_irq0)(); -/*static volatile unsigned long irq0_ticks=0; -static volatile unsigned int irq0_cnt=0,irq0_add=0,irq0_max=0; - -#pragma pack(push,1) -struct imf_entry { - uint8_t reg,data; - uint16_t delay; -}; -#pragma pack(pop) - -static struct imf_entry* imf_music=NULL; -static struct imf_entry* imf_play_ptr=NULL; -static struct imf_entry* imf_music_end=NULL; -static uint16_t imf_delay_countdown=0; - -#define PRINTBB {\ - printf("-------------------------------------------------------------------------------\n");\ - printf("buffer:\n");\ - printf("bigbuffer %Fp\t", gvar->ca.audiosegs[0]);\ - printf("&%Fp\n", MEMPTR gvar->ca.audiosegs[0]);\ - printf("imf_music %Fp\t", imf_music);\ - printf("&%Fp\n", imf_music);\ - printf("imf_play_ptr %Fp\t", imf_play_ptr);\ - printf("&%Fp\n", imf_play_ptr);\ - printf("imf_music_end %Fp\t", imf_music_end);\ - printf("&%Fp\n", imf_music_end);\ - printf("-------------------------------------------------------------------------------\n");\ -} - -void imf_free_music(global_game_variables_t *gvar) { - if (gvar->ca.sd.imf_music) free(gvar->ca.sd.imf_music); - MM_FreePtr(MEMPTRCONV gvar->ca.audiosegs[0], gvar); - gvar->ca.sd.imf_music = gvar->ca.sd.imf_play_ptr = gvar->ca.sd.imf_music_end = NULL; - gvar->ca.sd.imf_delay_countdown = 0; -} - -int imf_load_music(const char *path, global_game_variables_t *gvar) { - unsigned long len; - unsigned char buf[8]; - int fd; - - imf_free_music(gvar); - - fd = open(path,O_RDONLY|O_BINARY); - if (fd < 0) return 0; - - len = lseek(fd,0,SEEK_END); - lseek(fd,0,SEEK_SET); - read(fd,buf,2); - if (buf[0] != 0 || buf[1] != 0) // type 1 IMF - len = *((uint16_t*)buf); - else - lseek(fd,0,SEEK_SET); - - if (len == 0 || len > 65535UL) { - close(fd); - return 0; - } - len -= len & 3; - -// imf_music = malloc(len); - MM_GetPtr(MEMPTRCONV gvar->ca.audiosegs[0],len, gvar); - gvar->ca.sd.imf_music = (struct imf_entry *)gvar->ca.audiosegs[0]; - if (gvar->ca.sd.imf_music == NULL) { - close(fd); - return 0; - } - read(fd,gvar->ca.sd.imf_music,len); - close(fd); - - gvar->ca.sd.imf_play_ptr = gvar->ca.sd.imf_music; - gvar->ca.sd.imf_music_end = gvar->ca.sd.imf_music + (len >> 2UL); -// PRINTBB; - return 1; -}*/ - -// WARNING: subroutine call in interrupt handler. make sure you compile with -zu flag for large/compact memory models -void interrupt irq0() -{ - ggvv->ca.sd.irq0_ticks++; - if ((ggvv->ca.sd.irq0_cnt += ggvv->ca.sd.irq0_add) >= ggvv->ca.sd.irq0_max) { - ggvv->ca.sd.irq0_cnt -= ggvv->ca.sd.irq0_max; - old_irq0(); - } - else { - p8259_OCW2(0,P8259_OCW2_NON_SPECIFIC_EOI); - } -} - -/*void imf_tick() { - if (imf_delay_countdown == 0) { - do { - adlib_write(imf_play_ptr->reg,imf_play_ptr->data); - imf_delay_countdown = imf_play_ptr->delay; - imf_play_ptr++; - if (imf_play_ptr == imf_music_end) - { - printf("replay\n"); - imf_play_ptr = imf_music; - } - } while (imf_delay_countdown == 0); - } - else { - imf_delay_countdown--; - } -} - -void adlib_shut_up() { - int i; - - memset(adlib_fm,0,sizeof(adlib_fm)); - memset(&adlib_reg_bd,0,sizeof(adlib_reg_bd)); - for (i=0;i < adlib_fm_voices;i++) { - struct adlib_fm_operator *f; - f = &adlib_fm[i].mod; - f->ch_a = f->ch_b = f->ch_c = f->ch_d = 1; - f = &adlib_fm[i].car; - f->ch_a = f->ch_b = f->ch_c = f->ch_d = 1; - } - - for (i=0;i < adlib_fm_voices;i++) { - struct adlib_fm_operator *f; - - f = &adlib_fm[i].mod; - f->mod_multiple = 1; - f->total_level = 63 - 16; - f->attack_rate = 15; - f->decay_rate = 4; - f->sustain_level = 0; - f->release_rate = 8; - f->f_number = 400; - f->sustain = 1; - f->octave = 4; - f->key_on = 0; - - f = &adlib_fm[i].car; - f->mod_multiple = 1; - f->total_level = 63 - 16; - f->attack_rate = 15; - f->decay_rate = 4; - f->sustain_level = 0; - f->release_rate = 8; - f->f_number = 0; - f->sustain = 1; - f->octave = 0; - f->key_on = 0; - } - - adlib_apply_all(); -}*/ - void main(int argc,char **argv) { static global_game_variables_t gvar; - unsigned long ptick, tickrate = 700; + unsigned long adv; int c; #ifdef __DEBUG_CA__ dbg_debugca=1; @@ -211,22 +48,14 @@ void main(int argc,char **argv) { return; } - write_8254_system_timer(T8254_REF_CLOCK_HZ / tickrate); - old_irq0 = _dos_getvect(8); /*IRQ0*/ - _dos_setvect(8,irq0); - - _cli(); - gvar.ca.sd.irq0_ticks = ptick = 0; - _sti(); + SD_StartupTimer(&gvar); printf("playing!\n"); while (1) { - unsigned long adv; - _cli(); - adv = gvar.ca.sd.irq0_ticks - ptick; + adv = gvar.ca.sd.irq0_ticks - gvar.ca.sd.ptick; if (adv >= 100UL) adv = 100UL; - ptick = gvar.ca.sd.irq0_ticks; + gvar.ca.sd.ptick = gvar.ca.sd.irq0_ticks; _sti(); while (adv != 0) { @@ -248,7 +77,7 @@ void main(int argc,char **argv) { SD_imf_free_music(&gvar); SD_adlib_shut_up(); shutdown_adlib(); - _dos_setvect(8,old_irq0); + SD_ShutdownTimer(); write_8254_system_timer(0); /* back to normal 18.2Hz */ ShutdownCAMMPM(&gvar); } diff --git a/src/lib/.16_sd.h.kate-swp b/src/lib/.16_sd.h.kate-swp new file mode 100755 index 0000000000000000000000000000000000000000..5680e7077878ab64cbf7e7ce64b8e7c732066866 GIT binary patch literal 68 zcmZQzU=Z?7EJ;-eE>A2_aLdd|RWQ;sU|?VnDNf)LT$}j8fu+z^g*D=>bE$CC%itiO Rj0F&bfR<};D3G#r1prCD532wG literal 0 HcmV?d00001 diff --git a/src/lib/16_sd.c b/src/lib/16_sd.c index b3349bc2..1cdd5627 100755 --- a/src/lib/16_sd.c +++ b/src/lib/16_sd.c @@ -22,8 +22,7 @@ #include "src/lib/16_sd.h" -static void (interrupt *SD_old_irq0)(); -//void interrupt (*old_irq0)(void); +static void interrupt (*t0OldService)(void); void opl2out(word reg, word data) { @@ -196,6 +195,24 @@ void FMSetVoice(int voiceNum, FMInstrument *ins){ opl2out(opCellNum, ins->Feedback); } /* End of FMSetVoice */ + +//newer sd + + +struct glob_game_vars *ggvv; +// WARNING: subroutine call in interrupt handler. make sure you compile with -zu flag for large/compact memory models +void interrupt SDL_irq0() +{ + ggvv->ca.sd.irq0_ticks++; + if ((ggvv->ca.sd.irq0_cnt += ggvv->ca.sd.irq0_add) >= ggvv->ca.sd.irq0_max) { + ggvv->ca.sd.irq0_cnt -= ggvv->ca.sd.irq0_max; + t0OldService(); + } + else { + p8259_OCW2(0,P8259_OCW2_NON_SPECIFIC_EOI); + } +} + void SD_Initimf(global_game_variables_t *gvar) { if (!init_adlib()) { @@ -207,17 +224,10 @@ void SD_Initimf(global_game_variables_t *gvar) return; } - gvar->ca.sd.irq0_ticks= - //gvar->ca.sd.irq0_cnt= - //gvar->ca.sd.irq0_add= - gvar->ca.sd.imf_delay_countdown= - gvar->ca.sd.irq0_max=0; + gvar->ca.sd.imf_delay_countdown=0; gvar->ca.sd.imf_music= gvar->ca.sd.imf_play_ptr= gvar->ca.sd.imf_music_end=NULL; - gvar->ca.sd.irq0_cnt = 0; - gvar->ca.sd.irq0_add = 182; - gvar->ca.sd.irq0_max = 1000; /* about 18.2Hz */ SD_adlib_shut_up(); shutdown_adlib_opl3(); // NTS: Apparently the music won't play otherwise @@ -229,6 +239,28 @@ void SD_imf_reset_music(global_game_variables_t *gvar) gvar->ca.sd.imf_delay_countdown = 0; } +void SD_StartupTimer(global_game_variables_t *gvar) +{ + gvar->ca.sd.irq0_ticks= + gvar->ca.sd.irq0_cnt = 0; + gvar->ca.sd.irq0_add = 182; + gvar->ca.sd.irq0_max = 1000; /* about 18.2Hz */ + gvar->ca.sd.tickrate = 700; + + write_8254_system_timer(T8254_REF_CLOCK_HZ / gvar->ca.sd.tickrate); + t0OldService = _dos_getvect(8); /*IRQ0*/ + _dos_setvect(8,SDL_irq0); + + _cli(); + gvar->ca.sd.irq0_ticks = gvar->ca.sd.ptick = 0; + _sti(); +} + +void SD_ShutdownTimer() +{ + _dos_setvect(8,t0OldService); +} + void SD_imf_free_music(global_game_variables_t *gvar) { #ifndef SD_USESCAMMPM @@ -286,20 +318,6 @@ int SD_imf_load_music(const char *path, global_game_variables_t *gvar) return 1; } -struct glob_game_vars *ggvv; -// WARNING: subroutine call in interrupt handler. make sure you compile with -zu flag for large/compact memory models -void interrupt SD_irq0() -{ - ggvv->ca.sd.irq0_ticks++; - if ((ggvv->ca.sd.irq0_cnt += ggvv->ca.sd.irq0_add) >= ggvv->ca.sd.irq0_max) { - ggvv->ca.sd.irq0_cnt -= ggvv->ca.sd.irq0_max; - SD_old_irq0(); - } - else { - p8259_OCW2(0,P8259_OCW2_NON_SPECIFIC_EOI); - } -} - void SD_imf_tick(global_game_variables_t *gvar) { if (gvar->ca.sd.imf_delay_countdown == 0) { diff --git a/src/lib/16_sd.h b/src/lib/16_sd.h index 117ab0c4..73600a11 100755 --- a/src/lib/16_sd.h +++ b/src/lib/16_sd.h @@ -67,6 +67,8 @@ void FMSetVoice(int voiceNum, FMInstrument *ins); void SD_Initimf(global_game_variables_t *gvar); void SD_imf_reset_music(global_game_variables_t *gvar); +void SD_StartupTimer(global_game_variables_t *gvar), + SD_ShutdownTimer(); void SD_imf_free_music(global_game_variables_t *gvar); int SD_imf_load_music(const char *path, global_game_variables_t *gvar); void interrupt SD_irq0(void); diff --git a/src/lib/16_tdef.h b/src/lib/16_tdef.h index 0016fcee..9b1bebd6 100755 --- a/src/lib/16_tdef.h +++ b/src/lib/16_tdef.h @@ -667,6 +667,7 @@ typedef struct imf_entry_t* imf_play_ptr;//=NULL; imf_entry_t* imf_music_end;//=NULL; word imf_delay_countdown;//=0; + dword ptick,tickrate; } sd_t; //========================================================================== diff --git a/src/util/z.sh b/src/util/z.sh index 7561110a..d316bd53 100755 --- a/src/util/z.sh +++ b/src/util/z.sh @@ -1,7 +1,7 @@ #!/bin/bash while [ -n "$1" ] do - 7z a -v64k -r /var/www/"$1".zip "$1" - echo 7z a -v64k -r /var/www/"$1".zip "$1" + 7z a -v64k /var/www/"$1".zip "$1" + echo 7z a -v64k /var/www/"$1".zip "$1" shift done -- 2.39.5