Quelltext /~heha/hsn/kcemu/kcload.zip/KCLOAD.HLP

?_ue\lPQHilfe KC-LoadHilfe KC-Load  h#s (11/03)  ( @wwwwwwwwwwwwwwwwppwwp7pwwp7ppwwpppwwpppwwppppwwppppwwpppwwwpwppwwwpwppwwwpwppww0pwwpwpwwwwwwwwwwwwwwwwwwwwwwp0wwwwwwppwwwppp0pwwppppww0ppww;ppwpw0pp;wpwwpwpwwp3wpwwpwwpwpwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwBrowseButtons()/&;)z4p|CONTEXT^|CTXOMAPAM|FONTHL|KWBTREEM|KWDATATM|KWMAPM|SYSTEM|TOPIC|TTLBTREEU|bm0Gf|bm1yh|bm2-#>FRn90DDMY14MY@KC-Load - Kassetten-TransferE& >FȀKC-Load  Kassetten-TransferaYno 0>EP("start mailto:henrik.haftmann@e-technik.tu-chemnitz.de",0)KCLOAD.EXE  ein Hilfsprogramm nicht nur fr KCEMU  bertrgt Kassettendateien ber eine geeignete Soundkarte in den PC. Dabei knnen verschiedene Speicherformate ausgewhlt und bei Bedarf ber eine externe DLL selbst programmiert werden.Dieses Programm ist sicher nicht perfekt  Bug-Berichte bitte an henrik.haftmann@e-technik.tu-chemnitz.de.6' 6Zum ProgrammGn4I bL}&4H;!VorwortFunktionsprinzipErforderliche Hard- und Software3g' 6BedienungN4I b㠚HB-HauptfensterDatei-DialogBenutzerdefinierte Kodierung erstellenBg@% :0Hilfe KC-Load  h#s (5/13)8x1k	xVorwort3
@) "F	Vorwortxe' '0Zu einem Emulator gehrt sich eigentlich die Mglichkeit, Kassettendateien irgendwie in den PC zu bekommen. Fr Disketten wird CDRIVE empfohlen. Bei Kassetten sieht das schon anders aus. Obwohl der Ur-PC auch ein Kassetten-Interface hatte, wurde das bei den Kompatiblen spter weggelassen. Erst seit sich Soundkarten in PCs allgemein durchgesetzt hatten, gibt es wieder eine Mglichkeit, Bandaufnahmen ohne Basteleien in den Computer zu lesen.Auerdem ermglicht KC-Load die umgekehrte Richtung: Daten auf Kassette speichern; das ist wohl eher fr Nostalgiker oder zur Erinnerung, wie sich das damals so anhrte. (Fr Programmierer auch zu Testzwecken.)F' ?0Die ursprngliche Idee war, dass der emulierte Code im KCEMU die Kassettendateien einlesen knnte. Auf diese Weise knnte man jedes noch so exotische Format lesen. Das Problem ist jedoch, dass man dazu einen wirklich schnellen Computer braucht, und die Handhabung umstndlich bleibt.Ae1M
HFunktionsprinzip<(	) "&F	Funktionsprinzip"4 60Die Kassettenaufzeichung erfolgt im FM-Verfahren, also Frequenzmodulation. Dabei ist die konstante Lnge einer Bitzelle nicht von Belang, d.h. ein Block mit vielen Nullen ist krzer als einer mit vielen Einsen. Die Mglichkeit der Amplitudenmodulation mit einer Soundkarte (z.B. Kantenglttung, Nulldurchgangsschtzung) wurde nicht vorgesehen; es wird einfach Rechtecksignal generiert bzw. erwartet.Grundlegende Unterprogramme sind ReadSwing, Messen der Zeit (Samples) zwischen zwei Nulldurchgngen, und WriteSwing, Ausgabe einer Halbschwingung mit vorgegebener Anzahl von Samples. Diese beiden Unterprogramme berwachen den Samplepufferberlauf und fordern ggf. von MMSystem den nchsten Puffer an.&(	H* "0Auf die beiden Unterprogramme kann jedes denkbare Kassettenformat aufgebaut werden, mit weiteren Unterprogrammen wie WriteByte, WriteBlock usw.Weiterhin arbeitet das Programm mit einer Multimedia-Task, eine Art Multithreading unter 16-bit-Windows.Als Folge knnen Sie whrend des Ladens/Speicherns unbekmmert das Fenster verschieben usw.Fr den kontinuierlichen Datenfluss ist es aber wichtig, dass keine groe Applikation gestartet wird; d.h. Rechenzeit muss dennoch laufend zur Verfgung stehen.Q "1	SBHard- und Software-ErfordernisseL#H) "FF	Hard- und Software-ErfordernisseA&% 80Dieses Programm bentigt:b= Jp:l""Windows 3.1 (Standard-Modus) oder hhereine Soundkarte o.. mit einer Samplerate von 22kHzX&SB* "0Dieses ProgrammSBH bentigt mindestens Windows 3.1 im Standard-Modus demzufolge einen AT286 oder besser. Es ist 16bittrig und arbeitet daher auch unter WinOS2 und (vielleicht) WINE.Alle gngigen Soundkarten sind geeignet; sie muss 22kHz (Mono, 8bit) bei Wiedergabe und 11kHz oder 22kHz bei Aufnahme bewltigen. Ein einfacher PC-Lautsprecher-Treiber (speaker.drv) ist zur Wiedergabe nicht geeignet.Wie alle 16-Bit-Windows-Programme luft dieses Programm nicht unter 64-Bit-Windows-Versionen! Es sei denn, man installiert wine fr Windows, also den Windows-Emulator (ursprnglich) fr Linux.=B1
=B DHauptfenster8SBB) "F	HauptfensterX#B D5 8]0"
Das Programm prsentiert sich als Dialogfenster, welches smtliche Einstellmglichkeiten auf einen Blick serviert. Beim Draufziehen von Dateien (Drag'n'Drop) werden diese ausgegeben.Klicke mit der Maus auf Dialogelemente, oder drcke TAB und ENTER, um detaillierte Hilfe zu erhalten.=B]D1]DFDatei-Dialog8 DD) "F	Datei-Dialogq;]DF6 :y0"Das Laden und Speichern erfolgt generell netto, kein Hinzufgen oder Weglassen von Headern (Vorblcken). Werden Extra-Header gewnscht, muss der Schalter  Mit Vorblock eingeschaltet werden. Die Wirkung dieses Schalters ist abhngig von der gewhlten Kodierung.(Hier fehlt dem Schreiberling noch Information!)CDIF1R=IFXLLaden von Kassette<FF' *6Laden von Kassettel=IFH/ ,{0Dieser voreingestellte Schalter (ENTER lst Knopfdruck aus) startet den Einlesevorgang. Es wird das ausgewhlte Wave-In-Gert verwendet und die Daten ber die ausgewhlte Kodierung dekodiert. Das Speichern der erfolgreich eingelesenen Datei erfolgt generell am Ende. Dabei errt KC-Load einen geeigneten DOS-Dateinamen aus der vorhandenen Header-Information.Hinweis: Das Speichern im Z80-Format ist nicht explizit implementiert.Mit dem Laden werden die eingelesenen Blcke wie am KC in der blauen Statuszeile gelistet. (Betrifft nur KC85/1..4 und Turbolader MPM).`:FQI& t0Folgende Zeichen mssen beim Einlesen beachtet werden:HKE Xp:l>Block wurde fehlerfrei gelesen; Band weiterlaufen lassen?Block wurde falsch gelesen; bitte Band etwas zurckspulen*Nicht erwartete Blocknummer gelesen; bitte Band vor- oder zurckspulen (je nachdem, welcher Block erwartet wird), ggf. Band weiterlaufen lassen und abwarten.!Fehlerhafter Block wurde nach angebbarer Anzahl von Versuchen schlielich fehlerhaft eingelesenQIL( 0Bei den anderen Formaten erfolgen die Meldungen anders; bei BASICODE erscheint der Text; bei Turbolader h#s ist die Fehlerprfung systembedingt erst am Ende des gesamten Einlesevorgangs mglich.Q"KXL/ .D8Diese Seite ins HauptfensterGLL14"LSpeichern auf Kassette@XLL' 26Speichern auf KassetteLN/ ,0Mit diesem Schalter ffnet sofort der Dateiauswahl-Dialog, in dem Sie die zu speichernde Datei auswhlen. Mit dem OK beginnt der Speichervorgang ber das ausgewhlte Wave-Out-Gert und die Kodierung. Generell geht der Dateiname beim Speichervorgang verloren.Hinweis: Das Laden im Z80-Format ist nicht explizit implementiert.Mit dem Speichern werden die geschriebenen Blcke wie am KC in der blauen Statuszeile gelistet. (Betrifft nur KC85/1..4 und Turbolader MPM).F!L,O% B0Dabei gibt es nur ein Zeichen:qENO, (p:l<Block wurde fehlerfrei(?) geschrieben; Band weiterlaufen lassenw,OG' 0Die anderen Kodierungen machen sich anders bemerkbar; BASIOGXLCODE schreibt den gespeicherten Text in die Statuszeile.Q"O/ .D<Diese Seite ins Hauptfenster>
Gր1~րLese-Versuche7
'  6Lese-Versuched>րq& }0Um den Benutzer nicht mit nervenden Messageboxen o.. bei fehlerhaften Blcken zu qulen, wurde bereits am KC eine Mglichkeit geschaffen, nach einer gewissen Anzahl von Leseversuchen automatisch den Block fehlerhaft zu lesen. So konnte und kann sich der Bediener ausschlielich dem Kassettenrecorder widmen und muss nicht zweiarmig arbeiten. Die Anzahl der Versuche ist hiermit einstellbar von 0 (fehlerhaften Block sofort lesen) bis 7; auch mit Maus unter Verwendung des Mini-Rollbalkens rechts. Die Zahl der Versuche wird sofort wirksam, also auch whrend des Lesens.6
(  0Vorgabe: 4;
q1L">	Lautstrke4
' 6Lautstrke* "g0Bei der Wave-Ausgabe kann die Lautstrke graduell von 0 (Stille, UNSINN!) bis 7 (maximaler Hub, 98..98) eingestellt werden. Der Hub errechnet sich zu 2*Lautstrke.Vorgabe: 4:	-1~P

-ˍKodierung3`' 6Kodierung~-% 0Entsprechend der Vielzahl emulierter Computer mit verschiedenen Kassettenformaten untersttzt KC-Load folgende Kodierungen::`[ {p:l"""KC85/1..4, das Standardformat fr die KC-Reihe. Jeder Block umfasst 1 Byte Blocknummer, 128 Byte Nutzdaten und 1 Byte Prfsumme.Turbolader MPM, ein von Mhlhausen(?) stammendes Format mit gleichem Blockaufbau, aber doppelt so schnell.Turbolader h#s, ein von haftmann#software 1990/91 entwickelter Lader. Das Besondere: Der Code zum Turbo-Laden befindet sich im ersten Daten-Block (im gewohnten KC85/1..4-Format), so dass man keinen extra Lader braucht(e). Ist etwa dreimal so schnell; gravierender Nachteil ist, dass die Prfsumme erst am Schluss kommt. J bp:l""Z1013, dieser Computer verwendet als einziger Blcke mit 32 Byte Nutzdaten. Dabei gibt es Dateien ohne und mit Header vom Extra-Programm HEADERSAVE. Meist kursieren Dateien mit Header, weil man sich ansonsten unbedingt Anfangs-, End- und Startadresse aufschreiben musste und die Dateien keinen Namen trugen. Etwa so schnell wie KC85/1..4BASICODE, nicht nur ein BASIC-Dialekt, sondern auch ein gemeinsames Dateiformat, erschaffen von Radio Hilversum zur Vereinheitlichung der BASIC-Programme (besonders zwischen West-Computern). Sehr langsam. FSK-moduliertes RS-232 mit 1200 Baud, 8 Datenbits, 2 Stoppbits. Bit 7 invertiert. Trgerfrequenzen 2400 Hz (1-Bit), 1200 Hz (0-Bit). Keine Prfsummen, nur fr Text gedacht.9<K dup:l"-benutzerdefinierte Kodierungen; die Programme dazu befinden sich in DLLs mit der Endung .KCL, die sich im Startverzeichnis von KCLOAD.EXE befinden mssen. Wenn keine .KCL-Dateien gefunden wurden, erscheinen auch keine. Hinweise zum Schreiben solcher DLLs siehe Benutzerdefinierte Kodierung erstellen.>z' .0Vorgabe: KC85/1..4Q"<ˍ/ .D\
@Diese Seite ins Hauptfenster=z1>Ende/Abbruch6ˍ>' 6Ende/AbbruchQ+& W0Dieser Schalter beendet das Programm KC-Load. Er wechselt whrend der Wave- Ein/Ausgabe zu einem Abbruch-Schalter; damit wird der Wave-Vorgang beendet. Die Taste ESC funktioniert nur bei Beschriftung Abbruch; das Programmende kann mit Alt+E, Alt+F4, System-Men oder Task-Manager erreicht werden.6>ŏ1P
*ŏaHilfe/' 6HilfeŏU*ŏa+ &T0
Naja, muss ich den Schalter erklren?=10
Installieren6a' 6Installieren: B0Was macht denn SO ein Schalter?Zunchst wird KC-Load keinerlei Registry-Eintragungen vornehmen. Im Gegenzug vergisst es alle Einstellungen beim Beenden.Wollen Sie jedoch, dass KC-Load die Einstellungen (Lese-Versuche, Lautstrke, Kodierung und Wave-Gerte) sich merkt, drcken Sie diesen Knopf. Es wird sofort und ab jetzt auch bei jedem (normalen) Programmende gespeichert.<1~*xWave-Gerte5' 6Wave-Gerte8:9 @0Nur fr den Fall, dass Sie mehrere Soundkarten verwenden, knnen Sie hiermit die gewnschte auswhlen. Bei Wave-Mapper whlt Windows eine freie Soundkarte selbstndig aus (siehe auch Win95-Systemsteuerung/Multimedia/Audio/Bevorzugtes Gert).Falls keine Soundkarte auftaucht, ist entweder keine installiert, oder das Format 22kHz, Mono, 8bit (11kHz bei Aufnahme) wird nicht untersttzt. Falls Sie in diesem Falle Wave-Mapper auswhlen, kann das Programm sehr hart abstrzen (Ursache noch ungeklrt).& _0Auerdem haben Sie die Mglichkeit, mit WAVE-Dateien zu arbeiten; KC-Load benutzt in diesem Fall immer eine Datei KCLOAD.WAV im aktuellen Verzeichnis (Name nicht nderbar).G:V1VBlock (Status-Anzeige)@' 26Block (Status-Anzeige)?V? L08<Hier knnen Sie KC-like den Lade- und Speicher-Vorgang verfolgen. Zur Erluterung der angezeigten Symbole sehen Sie unter Laden von Kassette und Speichern auf Kassette nach.Vielleicht erinnert Sie die weie Schrift auf blauem Grund an den KC85W&,1
x,
Benutzerdefinierte Kodierung erstellenR)~) "RFO	Benutzerdefinierte Kodierung erstellen,.' 0Die zu erstellende DLL muss (oder sollte mindestens einen der beiden) Eintrittspunkte mit folgenden Namen und Definitionen aufweisen:~@ N0GO

procedure LOAD; export; {Laden von Kassette} ...procedure SAVE; export; {Schreiben auf Kassette} ...exports LOAD, SAVE;m.1 00Die Ordinalzahlen fr den Export sind beliebig.Der Kontext ist quasi ein Thread von MMTASK.TSK. (Ja, KCLOAD arbeitet multi-threaded!) Das regulre Ende dieser Unterprogramme entspricht einem Aufruf von EndProcess(true), was den Thread beendet.Diese beiden Routinen knnen sich zur Bewltigung ihrer Arbeit folgender Unterprogramme aus KCLOAD.EXE bedienen:(x a0O








function ReadSwing:Integer; far; external 'KCLOAD' index 2; {Flusswechsel erkennen, LOAD}procedure WriteSwing(Len:Integer); far; external 'KCLOAD' index 3; {Flusswechsel schreiben, SAVE}procedure EndProcess(OK:Boolean); far; external 'KCLOAD' index 4; {Vorzeitig abbrechen, LOAD und SAVE}procedure SetStatus(S:PChar); far; external 'KCLOAD' index 5; {Statuszeile setzen, LOAD und SAVE}function GetSizeData:Longint; far; external 'KCLOAD' index 6; {Restliche Datei-Bytes ermitteln, SAVE}function GetDataBlock(P:PChar; Size:Integer):Integer; far; external 'KCLOAD' index 7; {Datei-Bytes holen, SAVE}procedure AddDataBlock(P:PChar; Size:Integer); far; external 'KCLOAD' index 8; {Datei-Bytes schreiben, LOAD}procedure GetName(P:PChar; Size:Integer); far; external 'KCLOAD' index 9; {Dateiname beschaffen, SAVE}procedure SetNameHint(P:PChar); far; external 'KCLOAD' index 10; {Dateiname vorgeben, LOAD}G \0Diese Programme sind weitestgehend selbsterklrend, hoffe ich. Das Len bei WriteSwing bzw. das Ergebnis bei ReadSwing versteht sich als Sample-Zahl bei 22kHz.Wie der Name EndProcess andeutet, kehrt diese Routine niemals zurck.Das Ergebnis von GetDataBlock ist die Anzahl der in den Puffer kopierten Bytes. Falls dagegen AddDataBlock keine Bytes mehr schreiben kann, kehrt diese Prozedur nicht zurck; es erscheint eine Fehlermeldung.:
I `0Alternativ kann diese DLL in C oder Assembler(!) geschrieben werden; entsprechende Anweisungen mssen in die .DEF-Datei geschrieben werden. (Integer=int, PChar=LPSTR, Boolean=char.)Ist diese DLL fertig, muss sie in *.KCL umbenannt werden, damit sie von KCLOAD.EXE erkannt wird.Zum Testen der DLL ist es ntzlich, einen Breakpoint (asm int 3 end) zu Beginn der Unterprogramme LOAD und SAVE zu setzen.Hinweis: Eine solche DLL wurde noch nie geschrieben, wer's macht, ist der erste!1>1]>j,
j' 
01>1lHelvTimes New RomanSymbolArialCourier
=ULP
x=P
	
*>~"
M/&;)i248
FA3C17EAbbruchBenutzerdefinierte Kodierung erstellenBlock (Status-Anzeige)Datei-DialogEndeFunktionsprinzipHardwareHauptfensterHilfe Inhalr$Installieren(Kodierung,Laden von Kassette0Lautstrke4Lese-Versuche8Software<Speichern auf Kassette@VorwortDWave-GerteH*?w'.'})+\\	|SYSTEMC:\WINNT\TEMP\~hc24C:\WINNT\TEMP\~hc24
C:\WINNT\TEMP\~hc24K
F:\PROGWIN\KCLOAD\KCLHELP.ICOK'F:\PROGWIN\KCLOAD\KCLHELP.ICO
F:\PROGWIN\KCLOAD\KCLHELP.ICOK	  ( @wwwwwwwwwwwwwwwwppwwp/&;)LzKC-Load - Kassetten-TransferMVorwort	Funktionsprinzip
Hard- und Software-ErfordernisseHauptfenster=Datei-DialogLaden von KassetteSpeichern auf Kassette"Lese-Versuche~Lautstrke>KodierungP
Ende/AbbruchHilfe*InstallierenWave-GertexBlock (Status-Anzeige)Benutzerdefinierte Kodierung erstellen/&;)L4pĽ*jI}~<.VP
-SL}M"8on";!
:x\
@>B=&4H	H2)lp	
Z&MrEdMicrosoft DrawZ&MrEdXX	System)_
&MrEdO77	
&MrEd G-	-G --''lus

UD[	5d  lptf  <\!̃̃̃̃̃̃̃̃̃̃̃̃̃̃̃̃̃̃c'[w'[w'[w'[w#[w#wp(w#wp)w!p)w!p)wp)w!p(wp
)wp
)wp
/wp[wp[wp[wp[pcpc!p[w!p[w!p[w!p[w"p[w#p[w#[w'[w'[w'[w#
[w#wp
[w#wp
[w!p[w!p[w	p[w!p[w	p[	pc	
pu	pu	pu	pk	pu	pK	pL!pN!pL!pL!pK"p
P#p
	P#
xu#u#wpu#wp$N!p$Fw!p$FwpFw!pFw	
pFw	
p(w	p(w	
p(w	
p(w	
p(w	
p(w	
p(w	
p(w!p$(w!p$Fw!p$Fw!p$Fw"p$F#p$N#OIOwpINwpIMp1Mp1pEp1pEppp1p	pppp	pp	p	p
p
p	
p	
pMp
pMp1pMp1pMp1pNp1pOp1pO1OIPINwINw1:x
w1p?w1pBx	wpw1p	x	wp
wp	x	wpw	x	ww	x	w wpBx	wpDw1p:x
w1pMw1pM1pP1pO1$D
DwpD
DwpD
DpD
Dp6DODODDODODDDO7Dp6DODDOODDODDDDDOD7Dp6DOODDDDDODDODOOODO6Dpwx6DODDDODDODOOOODO6Dpx6DODDDODDODOOOODO6Dpx6DODDODDODODODODO6Dp6DODDDODDODODDODO6Dp6DODDDDDDODDODODDODO6Dp6DOODOODDODDDDODOD7Dp6DODDDDODODDODO7DpD
DpD
DpD
DpD
Dp$
81<,on1,}KK\
@KK.VeJ"KĽ q*S/	:Hotspot 10LadenHotspot 9SpeichernHotspot 8VersucheHotspot 7LautstHotspot 6KodierungHotspot 5EndeHotspot 4HilfeHotspot 3InstallHotspot 2WaveDevHotspot 1Statusd[lp^$?_owpz}zwpo_?
Vorgefundene Kodierung: UTF-80