Ready64 Forum
Commodore 64 => Segnalazione News => Topic aperto da: fab - 26 Maggio 2008, 13:47:58
-
Dopo oltre tre anni, una nuova versione.
Alcuni dei fattori che hanno ritardato l'uscita sono:
- l'indisponibilita' di cassette nei negozi
- l'assenza di un registratore allineato
- il fatto che Audacity, quando la CPU e' carica, a volte si mangia alcuni pezzi del file WAV che sta registrando, naturalmente senza avvertire l'utente
Il primo e' stato risolto grazie a un negozietto di elettronica che aveva qualche cassetta in fondo al magazzino. Il secondo, con un cacciavite e scaricando Azimuth 3000 da zophar.net, e ripulendolo un po' con Tapclean e un po' con un programma scritto da me appositamente.
La maggior parte delle novita' e' "sotto il cofano", ma qualcosa e' visibile.
libtap: la parte che effettua le conversioni audio<->TAP (cosa disapprovata da alcuni, specialmente in direzione audio->TAP). La parte audio->TAP e' stata in gran parte riscritta, e fornisce risultati migliori di Tape64 (giudizio assolutamente non obiettivo, prendetelo con le molle). Adesso, quando arriva un'onda, per determinare se si tratta di segnale o disturbo, la si confronta con l'altezza dell'onda precedente, invece che con un'altezza prefissata costante. Questo migliora il risultato nel caso di "buchi", cioe' punti della cassetta in cui il volume si abbassa.
libaudiotap: adesso usa Portaudio v19, il che significa che pablio.dll non serve piu'.
audiotap: tratta meglio i TAP versione 0 in caso di pause, e le pause lunghe. Nell'interfaccia grafica Windows, i nomi dei file appaiono senza il percorso
wavprg: prg2wav (linea di comando) ha un parametro -u, che implementa un'idea di iAN CooG: se usata, e il file di partenza e' e' .prg, al momento del FOUND appare il nome del file, invece di una stringa vuota. I file TAP generati sono ora riconosciuti dal selettore di VICE. Il plug-in turbotape.dll adesso riconosce alcuni programmi prima non visti, come quelli di http://perso.numericable.fr/ckckck/C64.html (http://perso.numericable.fr/ckckck/C64.html)
Si possono scaricare, come sempre, da http://wav-prg.sourceforge.net (http://wav-prg.sourceforge.net) .
Problemi noti: i binari Linux ancora sono quelli vecchi, i file -source.zip mancano di alcuni Makefile. Saranno risolti a breve.
-
Dopo oltre tre anni, una nuova versione.
\o/
wavprg: prg2wav (linea di comando) ha un parametro -u, che implementa un'idea di iAN CooG: se usata, e il file di partenza e' e' .prg, al momento del
yay! :)
Pero' io non riesco a ricompilare da me la versione commandline, mi mancano
htmlhelp.a e .h
libdl.a
libgen.h
e chissa' quant'altro. E' anche vero che uso mingw/msys e non mi sono mai preoccupato di scaricare una marea di libs aggiuntive.
Vedro' di scaricare il necessario se avro' tempo, in ufficio, ma se tu includessi gia' i binari precompilati anche per le versioni cmdline faresti cosa gradita.
Il plug-in turbotape.dll adesso riconosce alcuni programmi prima non visti, come quelli di http://perso.numericable.fr/ckckck/C64.html (http://perso.numericable.fr/ckckck/C64.html)
Bello, una variante di TT250. Ha giusto un byte 0x61 anziche' 0x01/0x02 dopo la sync sequence, basta una if(byt==0x61) byt=1; per implementarlo in tapclean =)
-
Hmmm... ho provato a cambiare nome a htmlhelp.h (scaricato dal sito Microsoft da qualche parte). Usando MinGW e MSYS questo è il risultato
C:\Documents and Settings\Fabrizio\Documenti\wavprg\cvs\wavprg>make wavprg.exe
gcc -c -o audiotap_file.o audiotap_file.c
gcc -c -o 2prg_api.o 2prg_api.c
gcc -c -o tapfile_read.o tapfile_read.c
gcc -c -o wav2prg_core.o wav2prg_core.c
gcc -c -o create_t64.o create_t64.c
gcc -c -o t64utils.o t64utils.c
gcc -c -o tapfile_write.o tapfile_write.c
gcc -c -o prg2wav_core.o prg2wav_core.c
gcc -c -o windows_gui/wav2prg_gui.o windows_gui/wav2prg_gui.c
windows_gui/wav2prg_gui.c:23:22: htmlhelp.h: No such file or directory
windows_gui/wav2prg_gui.c: In function `wav2prg_dialog_proc':
windows_gui/wav2prg_gui.c:620: error: `HH_DISPLAY_TOPIC' undeclared (first use i
n this function)
windows_gui/wav2prg_gui.c:620: error: (Each undeclared identifier is reported on
ly once
windows_gui/wav2prg_gui.c:620: error: for each function it appears in.)
make: *** [windows_gui/wav2prg_gui.o] Error 1
C:\Documents and Settings\Fabrizio\Documenti\wavprg\cvs\wavprg>make wav2prg.exe
gcc -c -o command_line/messages.o command_line/messages.c
gcc -c -o command_line/progressmeter.o command_line/progressmeter.c
gcc -c -o command_line/wav2prg.o command_line/wav2prg.c
gcc -c -o command_line/parse_options.o command_line/parse_options.c
gcc -Wl,--out-implib=wav2prg.lib -o wav2prg.exe audiotap_file.o 2prg_api.o tap
file_read.o wav2prg_core.o create_t64.o command_line/messages.o command_line/pro
gressmeter.o command_line/wav2prg.o command_line/parse_options.o wav2prg.def
Creating library file: wav2prg.lib
C:\Documents and Settings\Fabrizio\Documenti\wavprg\cvs\wavprg>make prg2wav.exe
gcc -c -o command_line/prg2wav.o command_line/prg2wav.c
gcc -c -o command_line/process_input_files.o command_line/process_input_files
.c
gcc -o prg2wav.exe audiotap_file.o t64utils.o tapfile_write.o prg2wav_core.o co
mmand_line/messages.o command_line/progressmeter.o command_line/prg2wav.o comman
d_line/process_input_files.o
C:\Documents and Settings\Fabrizio\Documenti\wavprg\cvs\wavprg>
In parole povere, la versione GUI non compila e quella a linea di comando sì, come è lecito aspettarsi. Non è che hai scritto make prg2wav invece di make prg2wav.exe? Il primo è per la versione Linux.
-
Considerando che non mi serve a nulla chiamare l'help in htm dalla versione commandline e che la libgen e' usata solo per la funzione basename() si puo' fare a meno di entrambe:
--- Makefile 2008-05-25 15:12:44 +0000
+++ wavprg34_ian\Makefile 2008-05-26 20:31:46 +0000
@@ -10,5 +10,6 @@
wavprg.exe: $(BASE_OBJECTS) $(WAV2PRG_OBJECTS) $(PRG2WAV_OBJECTS) $(WINDOWS_OBJECTS) $(WINDOWS_DEFS)
- $(CC) $(LDFLAGS) -mwindows -Wl,--out-implib=wavprg.lib -o $@ $^ -lcomdlg32 -lhtmlhelp
+ $(CC) $(LDFLAGS) -mwindows -Wl,--out-implib=wavprg.lib -o $@ $^ -lcomdlg32
+# -lhtmlhelp
windows_gui/wavprg-resources.o:windows_gui/wavprg.rc
--- windows_gui/prg2wav_gui.c 2008-05-13 21:10:34 +0000
+++ wavprg34_ian/windows_gui/prg2wav_gui.c 2008-05-26 20:31:52 +0000
@@ -24,5 +24,5 @@
#include <commctrl.h>
#include <string.h>
-#include <htmlhelp.h>
+//#include <htmlhelp.h>
#include "resource.h"
#include "../t64utils.h"
@@ -636,7 +636,7 @@
return FALSE;
}
- case WM_HELP:
- HtmlHelpA(hwndDlg,"docs\\wavprg.chm::/prg2wav_main.htm",HH_DISPLAY_TOPIC,0);
- return TRUE;
+ //case WM_HELP:
+ //HtmlHelpA(hwndDlg,"docs\\wavprg.chm::/prg2wav_main.htm",HH_DISPLAY_TOPIC,0);
+ //return TRUE;
default:
return FALSE;
--- windows_gui/wav2prg_gui.c 2008-05-20 22:01:06 +0000
+++ wavprg34_ian/windows_gui/wav2prg_gui.c 2008-05-26 20:32:00 +0000
@@ -21,5 +21,5 @@
#include <stdio.h>
#include <shlobj.h>
-#include <htmlhelp.h>
+//#include <htmlhelp.h>
#include "resource.h"
#include "../2prg_api.h"
@@ -617,7 +617,7 @@
}
return TRUE;
- case WM_HELP:
- HtmlHelpA(hwndDlg,"docs\\wavprg.chm::/wav2prg_main.htm",HH_DISPLAY_TOPIC,0);
- return TRUE;
+ //case WM_HELP:
+ //HtmlHelpA(hwndDlg,"docs\\wavprg.chm::/wav2prg_main.htm",HH_DISPLAY_TOPIC,0);
+ //return TRUE;
default:
return FALSE;
--- windows_gui/wavprg_main.c 2008-05-11 23:07:04 +0000
+++ wavprg34_ian/windows_gui/wavprg_main.c 2008-05-26 20:32:04 +0000
@@ -16,5 +16,5 @@
#include <windows.h>
-#include <htmlhelp.h>
+//#include <htmlhelp.h>
#if (defined WIN32 && !defined __CYGWIN__)
#include "../mswin_compatibility.h"
@@ -101,7 +101,7 @@
}
return TRUE;
- case WM_HELP:
- HtmlHelpA(hwnd,"docs\\wavprg.chm",HH_DISPLAY_TOC,0);
- return TRUE;
+ //case WM_HELP:
+ //HtmlHelpA(hwnd,"docs\\wavprg.chm",HH_DISPLAY_TOC,0);
+ //return TRUE;
case WM_CLOSE:
DestroyWindow(hwnd);
--- command_line/process_input_files.c 2008-05-12 21:43:30 +0000
+++ wavprg34_ian/command_line/process_input_files.c 2008-05-26 20:41:12 +0000
@@ -16,5 +16,10 @@
#include <stdio.h>
#include <string.h>
-#include <libgen.h>
+//#include <libgen.h>
+#ifdef WIN32
+#define SLASH '\\'
+#else
+#define SLASH '/'
+#endif
#include <errno.h>
@@ -163,5 +168,10 @@
/* first, strip off path from filename */
- stripped = basename(filename);
+ //stripped = basename(filename);
+
+ if( (stripped=strrchr(filename,SLASH))!=NULL)
+ stripped++;
+ else
+ stripped = filename;
/* then ignore .prg at end if present */
poi una volta creato wav2prg.def copiandolo da wavprg.def si compilano entrambi, prg2wav e wav2prg. questo pero' va rinominato wavprg se no va a donnine allegre il meccanismo dei plugins.
Quindi:
Ian@CHOJIN ~/wavprg34_ian
$ make
gcc -c -o audiotap_file.o audiotap_file.c
gcc -c -o 2prg_api.o 2prg_api.c
gcc -c -o tapfile_read.o tapfile_read.c
gcc -c -o wav2prg_core.o wav2prg_core.c
gcc -c -o create_t64.o create_t64.c
gcc -c -o t64utils.o t64utils.c
gcc -c -o tapfile_write.o tapfile_write.c
gcc -c -o prg2wav_core.o prg2wav_core.c
gcc -c -o windows_gui/wav2prg_gui.o windows_gui/wav2prg_gui.c
gcc -c -o windows_gui/wavprg_main.o windows_gui/wavprg_main.c
windres --include=windows_gui -o windows_gui/wavprg-resources.o windows_gui/wavprg.rc
gcc -c -o windows_gui/wavprg_status_window.o windows_gui/wavprg_status_window.c
gcc -c -o windows_gui/prg2wav_gui.o windows_gui/prg2wav_gui.c
gcc -mwindows -Wl,--out-implib=wavprg.lib -o wavprg.exe audiotap_file.o 2prg_api.o tapfile_read.o wav2prg_core.o create_t64.o t64utils.o tapfile_write.o prg2wav_core.o windows_gui/wav2prg_gui.o windows_gui/wavprg_main.o windows_gui/wavprg-resources.o windows_gui/wavprg_status_window.o windows_gui/prg2wav_gui.o wavprg.def -lcomdlg32
Creating library file: wavprg.lib
Ian@CHOJIN ~/wavprg34_ian
$ make prg2wav.exe
gcc -c -o command_line/messages.o command_line/messages.c
gcc -c -o command_line/progressmeter.o command_line/progressmeter.c
gcc -c -o command_line/prg2wav.o command_line/prg2wav.c
gcc -c -o command_line/process_input_files.o command_line/process_input_files.c
gcc -o prg2wav.exe audiotap_file.o t64utils.o tapfile_write.o prg2wav_core.o command_line/messages.o command_line/progressmeter.o command_line/prg2wav.o command_line/process_input_files.o
Ian@CHOJIN ~/wavprg34_ian
$ make wav2prg.exe
gcc -c -o command_line/wav2prg.o command_line/wav2prg.c
gcc -c -o command_line/parse_options.o command_line/parse_options.c
gcc -Wl,--out-implib=wav2prg.lib -o wav2prg.exe audiotap_file.o 2prg_api.o tapfile_read.o wav2prg_core.o create_t64.o command_line/messages.o command_line/progressmeter.o command_line/wav2prg.o command_line/parse_options.o wav2prg.def
Creating library file: wav2prg.lib
Ian@CHOJIN ~/wavprg34_ian
$ mv wav2prg.exe wavprg.exe
Ian@CHOJIN ~/wavprg34_ian
$ strip *.exe -s
e poi si copiano gli exe dove stanno anche i plugins. Tutto regolare. =)
-
Le modifiche ai file windows_gui/* non hanno effetto sui tool a linea di comando, e quindi non sono necessari se ti servono solo quelli (però servono se vuoi compilare la versione GUI. In effetti un'#ifdef ci potrebbe stare bene).
C'è un trucchetto: invece di rinominare wav2prg.exe, si ricompilano i plug-in con
make .dll EXE_NAME=wav2prg
(richiede che wav2prg.lib esista).
Ah, in effetti avevo dimenticato wav2prg.def e wavprg-plugins.def. Ho riuploadato il file src.zip, con i file mancanti.
-
ah ecco :)
Sarebbe bene se includessi un piccolo howto nei sorgenti, stavo appunto cercando di venire a capo dei problemi di compilazione dei plugins.
Intanto riscarico i sorgenti e vediamo.
edit: ti sei dimenticato ancora wavprg-plugins.def, lo prendo dalla 3.3
kernalloader mi segna una strana dipendenza mancante:
Ian@CHOJIN ~/wavprg34_ian/plugins
$ make kernelloader.dll
gcc -nostdlib -O2 -I.. -shared -o kernelloader.dll kernelloader.c wavprg-plugins.def ../wavprg.lib
C:/TEMP/cccwJPfb.o:kernelloader.c:(.text+0x9c): undefined reference to `_alloca'
collect2: ld returned 1 exit status
make: *** [kernelloader.dll] Error 1
gli altri 2 invece ora compilano.
alloca() mi sa tanto di roba stravecchia, non capisco da dove arrivi pero', non la trovo in alcun sorgente
-
Sarebbe bene se includessi un piccolo howto nei sorgenti, stavo appunto cercando di venire a capo dei problemi di compilazione dei plugins.
Buona idea. Lo farò (un giorno).
$ make kernelloader.dll
gcc -nostdlib -O2 -I.. -shared -o kernelloader.dll kernelloader.c wavprg-plugins.def ../wavprg.lib
C:/TEMP/cccwJPfb.o:kernelloader.c:(.text+0x9c): undefined reference to `_alloca'
collect2: ld returned 1 exit status
make: *** [kernelloader.dll] Error 1
[/CODE]
gli altri 2 invece ora compilano.
alloca() mi sa tanto di roba stravecchia, non capisco da dove arrivi pero', non la trovo in alcun sorgente
Risolvere quel problema, all'epoca, mi costò la salute mentale. E' una cosa furba che gcc per Windows fa quando ci sono troppe variabili nello stack. Compilerebbe senza -nostdlib, e per farlo compilare serve
make kernelloader.dll EXTRA_LIBS=-lgcc
-
ti sei dimenticato ancora wavprg-plugins.def
Uploadato. Per la terza volta. Speriamo che sia quella buona.
(il tempo per editare e' scaduto, quindi nuovo messaggio)
-
make kernelloader.dll EXTRA_LIBS=-lgcc
Perfetto, l'ho incluso direttamente nel makefile.
Non solo compila, se ricompilo tutte le dll cosi' anche novaload.dll non viene piu', ingiustamente, riconosciuta come trojan, ho appena mandato la dll su virustotal e nessun AV segnala falsi allarmi. Ora mi prendo i src da sourceforge delle altre e le ricompilo.