Das funktioniert so leider alles nicht. Das liegt nicht an eurem tollen Code JeeK und EgonOlsen71 , sondern schlicht weg an der Tatsache, das das BBS Programm damit zu groß wird. Es wird der wenige mir zur Verfügung stehende RAM Bereich überschritten. Das führt nach compiling mit Blitz Compiler zu Laufzeitfehlern. ![]()
Daher habe ich mir einen anderen Weg überlegt wie es funktionieren könnte. Das Transferprotocol X-Modem(1K) bringt die Routinen für die CRC16 Berechnung ja schon mit. Der Code liegt zwar im Bereich ab $b900, also unter dem BASIC ROM, kann aber mittels BBS Kernal Bordmitteln vom BASIC Programm aus angesprochen werden.
Den oben schon gebildeten String lege ich in einem BBS Buffer Bereich bei $cf00 ab. Nun muss ich "nur noch" das Protokoll dazu bringen, diesen Bereich einmalig für die CRC16 Berechnung zu verwenden.
Auweia.... jedenfalls ist der BASIC Teil damit in knapp 7 Codezeilen erledigt. Der ML Part mit dem ich das X-Modem Protokoll beackern muss ist noch gedanklich in Arbeit...
Für Interessierte, so siehts gerade aus:
;Y-Modem needs to transfer Filename in Transfer-Block #0 instead
;waiting for "C" from receiver
_ymdwtc: get#5,a$:if a$<>"c" then goto _ymdwtc
;send SOH 00 FF foo.c NUL[123] CRC CRC -> 131 Bytes + 2 CRC16 Bytes = 133 Bytes. Then add chr$(13) for str2buf Routine
;no Filesize in Bytes or modification Date send (TODO)
i$="{CTRL-A}"+chr$(0)+chr$(255)+p$:for i=len(p$) to 131:i$=i$+chr$(0):next:i$=i$+g$
;write i$ to output Buffer $cf00. BASIC ROM Routine $b08b search string
;strip closing g$ (->chr$(13)) from i$
;call crc16 Routine from Protocol. $c718 and get i$ back from Outputbuffer
sys 45195 o$:r=256*peek(781)+peek(780):gosub _str2buf:i$=left$(i$,len(i$)-1):sys 50968:gosub _createis
;send File+crc to Modem
_ymdsndfn: print i$;:print#5,i$;
;wait for ACK / "C"
get#5,a$:get#5,b$:if a$=chr$(6) and b$="c" then goto _17481
;cancel "CAN" from receiver ?
if (a$=chr$(18)) and (b$=chr$(18)) then ab=1:goto _17482
;resend
goto _ymdsndfn
_17482: -> abbruch Routine...
Alles anzeigen
Die hier nicht aufgeführten _str2buf und _createis packen den Inhalt der Variablen i$ aus dem Variablen Speicher in den BBS Buffer bei $cf00, bzw. wieder zurück von $cf00 in die Variable i$.
HOLY MOSES/ROLE wird ggf. wissen was ich meine.... alter BBS Coder.
EDIT: Sorry keine Zeilennummer in o.g. Codeschnipsel, da ich inzwischen nur noch mit BPP vom Henning arbeite.