þþ3èX;SAVE #D9:FMSBSIO.M65òAŠSECTOR I/OAüX;X; BSIO - DO SECTOR I/OX; …@ORG l$X;. „BSIO 8X;BP†DCBSEC;; SET SECTOR HIL'†DCBSEC;;SECTOR LOVX;`&…BSIORQ>†DCBCRS;;ASSUME READ SECTORj%>@;;AND GET DATAtD…DSIO1;;BR IF READ~X;ˆ3‰WRITEMODE ;; LDY# can get either 'W' or 'P'’$Q>†DCBCWS;;ELSE LOAD WRITE SECTORœ%>€;;AND PUT DATA¦X;° …DSIO1ºX;Ä ‡RAMDISKÎ6;; save read/write flagØ$†ICDNOZ;; drive numberâ(>;; RAMDISK?ìH‰:REALDISKöX;X; do RAMDISK sector I/O! X;8;; recover flag% …RAMIO;; real work done elsewhere(!…DSIO5;; join up for return2X;<X; end of RAM DISK I/OFX;P ‰:REALDISKZ8;; just to clean up stackdX;nxX;‚P†DCBCMD;;SET COMMANDŒ$Q>†TIMOUT;;TIMEOUT DEFAULT LOADED–X;  …DSIO2ªP…DCBTO;;SET TIME OUT´'†SIOCMD;;AND SIO CMD¾X;ÈQ>1;;DISK SERIAL BUS IDÒP†DCBSBI;;SET IDÜX;æQ>;;SET RETRY COUNTð P…RETRYúX;'Q>€;; data length: always 128 bytesP†DCBCNT;; (lower byte=128)T?;; (gets 0 to A reg)"P†DCBCNT;; (upper byte=0),X;6X;@ …DSIO4J*Q†SIOCMD;; $40 or $80, as saved earlierTP†DCBSTA;; needed by SIO^ „SIOV;;CALL SERIAL I/Oh I…DSIO5;;IF GOOD I/O THEN RTSrX;|"…RETRY;;Test: retry again?†I…DSIO4;; yes...loopX;šX;¤%…DSIO5$†CURFCB;;RELOAD CURRENT FCB®#C;; Y-reg has DCBSTA--SIO Status¸:ÂX;