eCINITQ>4BD600e PCBAUDLe Q>5BD600e PCBAUDHe CSPECL:e&COPENQICAX2Z;;Kurze/lange Bloeckee%PFTYPE;;%1xxxxxxx = kurze BloeckeeQICAX1Z;;Lesen / ScreibeneM> eR>eFCASOPENINeR>e FOPOUTe:eCASOPENINQ>ePWMODE;;LesenePFEOF;;Flag loecheneQ>e BEEP;;Tr||||t !e"GOPNRTN;;Falls Fehler bei BeepeGOCASMOTONQ>4ePPACTL;;Motor einschaltene $PALNTSCe%%RLEADLO9;;LO Dauer des VorspannseQRLEADHI9;;HIe>eQ>;;Timer 3ePCDTMF3;;Flag loeschene SETVBV;;Timer 3 setzene*WAITTMQCDTMF3;;Ist Timer 3 abgelaufeneHWAITTM;;Nein, warteneQ>e&PBPTR;;N{chstes Byte = Puffer leerePBLIM;;Pufferl{nge 128 Bytee !OPOKe.PBRK%>BRKABT;;Fehler: Abbruch durch BREAKe"BRKKEY;;zr}cksetzeneOPNRTNQ>ePWMODE;;loeschen &e :;;Endee OPOUTQ>ePWMODE;;SchreibeneQ>e BEEP;;Tr||||t, tr||||t.e"GOPNRTN;;Falls Fehler bei Beepe!Q>4BD600;;Baudrate einstellene PAUDF3e Q>5BD600e PAUDF4eQ>`e PDDEVICe SENDEV;;Mark-Ton schreibeneQ>4ePPACTL;;Motor einschaltene $PALNTSCe%%WLEADLO9;;LO Dauer des VorspannseQWLEADHI9;;HIe>eQ>e SETVBV;;Timer 3 setzeneQ>ePCDTMF3;;Flag l|schene&WDLRQBRKKEY;;Wurde BREAK gedr}ckteFPBRK;;Ja ->eQCDTMF3;;Zeit schon rumeHWDLR;;Nein ->eQ>ePBPTR;;InitialisiereneOPOK%>SUCCES;;Status oke:e!CGETQFEOF;;Falls End Of FileeGISEOF;;Ja ->e $BPTR;;Pufferende erreicht ?e (BLIMe%FCASREADBL;;Ja, neuen Block lesene-QCASBUF9;;N{chstes Byte aus dem Puffere #BPTR;;Pufferzeiger erhoehene%>SUCCES;;Status okeGBX:eCASREADBLQ> R;;SIO: Lesene) SIOSB;;Puffer einstellen und JMP SIOeCeGGBX;;SIO FehlereQ>e"PBPTR;;Zeiger auf Pufferanfange$>e$QRECTYP;;Art deskommenden Blockse$R>;;Letzter Block, 128 Nullen ?eFATEOF;;Ja, EOF ->e#R>;;Block < 128 g}ltige Byte ?e!HNLR;;Nein, normaler Block ->e,$RECSIZ;;Im letzten Byte steht die L{ngee'NLR&BLIM;;Tats{chliche Pufferl{ngee !CGETe$ATEOF"FEOF;;Fehler: End Of FileeISEOF%>EOFERRe:eCPUT$BPTRe$PCASBUF9;;Zeichen abspeicherne#BPTR;;Pufferzeiger erh|hene%>SUCCES;;Status oke(>;;Puffer voll ?eFCPUT1;;Ja ->e:e*CPUT1Q>;;Normaler Block mit 128 Bytee) WSIOSB;;(Write SIO on System Buffer)eQ>ePBPTR;;Puffer wieder freie:e(CSTATS%>SUCCES;;(3 Byte verschenkt)e:e(CCLOSEQWMODE;;Beim Schreiben vorherf GCLWRT;;den Puffer leeren ->f%>fFCAXQ><;;Motor ausschaltenf PPACTLf:fCLWRT$BPTR;;Puffer leer ?fFWTLR;;Ja ->f!&RECSIZ;;Anzahl g}ltiger Bytef'Q>;;Blocktyp: Weniger als 128 Byte f WSIOSB;;Puffer schreiben fGFCAX;;Bei Fehler -> f WTLR$> f%Q>;;Puffer mit 128 Nullen f}llen fZTBUFPCASBUF9f0fIZTBUF;;Schleifef)Q>;;Blocktyp: Letzter Block m. 128*0f! WSIOSB;;SIO Puffer schreibenf!!FCAX;;(File Closed And eXit)fBEEPPFREQ;;Tr||tanzahlfBEEP1QRTCLOKf,f $PALNTSCfOBEEPLEN9;;1s Beepf>f WFLQ>fPCONSOL;;'Lautsprecher' anfQ>f%>fBEEPW01;;Einen AugenblickfHBEEPW0;;warten ->fPCONSOL;;'Lautsprecher' aus f%>!fBEEPW11;;Einen Augenblick"fHBEEPW1;;warten ->#f%(RTCLOK;;Ist die Sekunde rum ?$fHWFL;;Nein ->%f"FREQ;;Schon alle Tr||ts ?&fFWFAK;;Ja ->'fA(f,)f $PALNTSC*fOBEEPGAP9;;Ein wenig Pause+f>;;zwischen den Tr||ts,fBEEPW2(RTCLOK-f HBEEPW2.fFBEEP1;;Weiter tr||ten/f0WFAK WFAK1;;(Wait For Acknowldge): Der User0f$C;;acknowledged das Troetkommando1f%:;;durch Dr}cken einer Taste. Ende2f'WFAK1QKEYBDV;;Indirekter Sprung3f5;;nach KGETCH4fQKEYBDV5f56f:7f'SIOSBPDCOMND;;SIO on System Buffer8fQ>;;Pufferl{nge 131 Byte9f PDBYTHI:fQ>;f PDBYTLO5CASBUF;;Pufferadresse=f PDBUFHI>f Q>4CASBUF?f PDBUFLO@fQ>`;;CassetteAf PDDEVICBfQ>Cf PDUNITDfQ>#;;Timeout 35 secEf PDTIMLOFf&QDCOMND;;Datenrichtung feststellenGf%>@;;%01xxxxxx = SIO lesenHfR> R;;Ist es lesen ?IfFSIOSBRW;;Ja ->Jf"%>;;%10xxxxxx = SIO schreibenKfSIOSBRW'DSTATSLfQFTYPE;;Kurzer/langer IRGMf PDAUX2Nf$ SIOV;;(JMP SIO ersetzt das RTS)Of:Pf0WSIOSBPRECTYP;;(Write SIO on System Buffer)Qf(Q>U;;2 Byte f}r die BaudratenmessungRf%PCASBUF;;beim Lesen vor dem LesenSf"PCASBUF;;eines jeden BlocksTfQ> W;;SIO: SchreibenUf' SIOSB;;(JMP SIOSB ersetzt das RTS)Vf:Wf)WLEADHI =;;Dauer: Write Leader HIXf)WLEADLO =;; LOYf)RLEADHI =;; Read Leader HIZf)RLEADLO @=;; LO[f"BEEPLEN =;; Des Beep\f)BEEPGAP  =;; Pause zw. Beeps]fADer Drucker - TreiberA