#ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ37250 ;37260 ; Process next file37270 ;37280 LB5AC JSR PRTCLS ;$BC0837290 SEC37300 LDA WRKBUF ;$00AB3731}0 SBC #$FE37320 STA Z0265 ;$00AF37330 LDA WRKBUF+1 ;$00AC37340 SBC #$2E37350 STA Z0267} ;$00B037360 SEC37370 LDA BYTTOT ;$009E37380 SBC Z0265 ;$00AF37390 STA WORKA0 ;$00A037400 } LDA BYTTOT+1 ;$009F37410 SBC Z0267 ;$00B037420 ORA WORKA0 ;$00A037430 BEQ LB5CD ;$B5CD37440 } BCS LB5DC ;$B5DC37450 LB5CD LDA LARGE ;$009937460 BNE LB581 ;$B581 Single file?37470 LDX INCSPC ;$00A3 }37480 INC FISPEC,X ;$9034 Increment character in filespec37490 JSR INIT24 ;$9726 Initialize sector buffer3750 }0 JMP LB18D ;$B18D37510 LB5DC LDA BYTTOT ;$009E37520 SBC Z0265 ;$00AF37530 STA BYTCNT ;$00B537540 } STA WORK9B ;$009B37550 LDA BYTTOT+1 ;$009F37560 SBC Z0267 ;$00B037570 STA BYTCNT+1 ;$00B637580 } STA WORK9C ;$009C37590 LDA #L2F0037600 STA SECBUF ;$00A937610 LDA /L2F0037620 STA SEC }BUF+1 ;$00AA37630 LDY #$0137640 LDA (WRKBUF),Y ;$00AB37650 CMP #$45 ; End of file?37660 BNE L}B618 ;$B61837670 DEY37680 CMP (WRKBUF),Y ;$00AB37690 BNE LB618 ;$B61837700 INC WRKBUF ;$00AB}37710 BNE LB607 ;$B60737720 INC WRKBUF+1 ;$00AC37730 LB607 LDY #$0137740 SEC37750 LDA BYTCNT} ;$00B537760 SBC #$0137770 STA BYTCNT ;$00B537780 LDA BYTCNT+1 ;$00B637790 SBC #$0037800 } STA BYTCNT+1 ;$00B637810 LDA (WRKBUF),Y ;$00AB37820 LB618 STA PASS ;$009A37830 CLC37840 LDA WRK}BUF ;$00AB37850 ADC #$0237860 STA WRKBUF ;$00AB37870 LDA WRKBUF+1 ;$00AC37880 ADC #$0037890 } LDY #$0037900 STA WRKBUF+1 ;$00AC37910 LB629 LDA (WRKBUF),Y ;$00AB37920 STA (SECBUF),Y ;$00A937930 } INC WRKBUF ;$00AB37940 BNE LB633 ;$B63337950 INC WRKBUF+1 ;$00AC37960 LB633 INC SECBUF ;$00A937970 } BNE LB639 ;$B63937980 INC SECBUF+1 ;$00AA37990 LB639 SEC38000 LDA WORK9B ;$009B38010 SBC #$0}138020 STA WORK9B ;$009B38030 LDA WORK9C ;$009C38040 SBC #$0038050 STA WORK9C ;$009C38060 } ORA WORK9B ;$009B38070 BNE LB629 ;$B62938080 JSR INIT24 ;$9726 Initialize sector buffer38090 LDA} BNKFLG ;$0088 Are we doing regular memory?38100 BNE LB660 ;$B660 We are doing banked memory38110 LDA Z0315 ;}$00B338120 BNE LB66C ;$B66C38130 JSR LB279 ;$B279 Reading38140 LB658 JSR SWPSRC ;$B680 Possibly swap disks}38150 LDA PASS ;$009A38160 JMP LB362 ;$B362 Continue to read data from current input file38170 ;38180 ; Bank}ed memory38190 ;38200 LB660 JSR L9DE4 ;$9DE438210 BCC LB66C ;$B66C Buffers not empty38220 LDA Z0315 ;$00B3}38230 BNE LB66C ;$B66C38240 JMP LB658 ;$B65838250 LB66C JSR SHWPASS ;$92E038260 LDA PASS ;$009A382}70 BPL LB67D ;$B67D Last file has bit 7 set38280 LDX #LB02A38290 LDY /LB02A38300 JSR PRTSTR ;T}his is the last pass38310 JSR BELL ;$95AB38320 LB67D JMP LB47E ;$B47E38330 SWPSRC LDX SRCDRV ;$900438340 L}DA SRCDEN ;$900538350 JSR RDCFG ;$91ED38360 CPX DSTDRV ;$900638370 BNE LB698 ;$B69838380 LDX }#L975A38390 LDY /L975A38400 JSR PRTSTR ;Insert source disk38410 JSR GETRET ;$97A438420 LB698 RTS38!}430 ;38440 ; Decode data. Return status in Y.38450 ;38460 DECODE LDY #$0038470 LDA SEQFLG ;$00B4 Next sequential "}sector?38480 BPL LB6A8 ;$B6A838490 INC SECTOR ;$0097 Increment38500 BNE LB6A5 ;$B6A538510 INC#} SECTOR+1 ;$009838520 LB6A5 JMP LB6B2 ;$B6B238530 LB6A8 LDA (WRKBUF),Y ;$00AB Get sector number from data38540 ST$}A SECTOR ;$009738550 INY38560 LDA (WRKBUF),Y ;$00AB38570 STA SECTOR+1 ;$009838580 INY38590 L%}B6B2 LDA (WRKBUF),Y ;$00AB Get compression type38600 PHA38610 AND #$8038620 STA SEQFLG ;$00B4 Set se&}quential/jump sector number flag38630 PLA38640 AND #$7F ; Mask off sequential/jump flag38650 LDX #$00'}38660 INY38670 ;38680 ; Based on the compression type, branch to the routine that38690 ; processes the data for th(}is type of compression.38700 ; Y contains either 1 or 3.38710 ;38720 CMP #$4538730 BNE LB6CA ;$B6CA38740 ;)}38750 ; Compression type $4538760 ; Flush the sector buffer to disk38770 ; Return $01 in Y38780 ;38790 TYA38800 *} JSR WRKUPD ;$B75838810 LDY #$0138820 RTS38830 LB6CA CMP #$4738840 BNE LB6EF ;$B6EF38850 ;3+}8860 ; Compression type $4738870 ; Uncompressed sector.38880 ; Create a sector at $2E00, either 128 or 256 bytes.38890 ; R,}eturn $00 in Y38900 ;38910 TYA38920 JSR WRKUPD ;$B75838930 LDY #$0038940 LB6D4 LDA (WRKBUF),Y ;$00-}AB38950 STA L2E00,Y ;$2E0038960 INY38970 CPY SECSIZ ;$009538980 BNE LB6D4 ;$B6D438990 .} LDA #$8039000 JSR WRKUPD ;$B75839010 LDA SECSIZ+1 ;$0096 Double density?39020 BEQ LB6EC ;$B6EC39030/} LDA #$80 ; Make it 256 bytes total39040 SKPBYT JSR WRKUPD ;$B75839050 LB6EC LDY #$0039060 RTS39070 LB6EF 0} CMP #$4239080 BNE LB70D ;$B70D39090 ;39100 ; Compression type $4239110 ; 128 byte DOS sector, data portion filled1} with identical bytes.39120 ; Set 5 bytes at end of sector.39130 ; Fill first 123 bytes with the value of the first of thos2}e 5.39140 ; Or set 7 bytes at end of sector if Y = 1, but this is improbable.39150 ;39160 LB6F3 LDA (WRKBUF),Y ;$00AB3913}70 STA L2E78,Y ;$2E78 DOS portion, last bytes of sector39180 INY39190 CPY #$0839200 BCC LB6F3 4};$B6F339210 LDY #12339220 LDA L2E00,Y ;$2E00 Load 123rd byte of sector and39230 LB702 STA L2E00,Y ;$2E00 Fi5}ll beginning of sector with it39240 DEY39250 BPL LB702 ;$B70239260 LDA #$0839270 JMP SKPBYT ;6}$B6E9 Go skip these bytes39280 LB70D CMP #$4339290 BNE LB764 ;$B76439300 ;39310 ; Compression type $4339320 ; Al7}ternating uncompressed and compressed strings of data39330 ; Each string is preceded by an index byte. Zero is a valid lengt8}h.39340 ; X is used as a sector byte index.39350 ;39360 LB711 LDA (WRKBUF),Y ;$00AB Load end index of uncompressed string9}39370 STA WORK9B ;$009B Store end position index39380 INY39390 TYA39400 JSR WRKUPD ;$B758394:}10 LDY #$00 ; Reset length counter/index39420 LB71C CPX WORK9B ;$009B End position of string reached?39430 B;}EQ LB73D ;$B73D Go do compressed string39440 LDA (WRKBUF),Y ;$00AB Get byte from string39450 STA L2E00,X ;$2E<}00 store it in the sector39460 INY39470 INX39480 CPX SECSIZ ;$0095 End of sector reached?39490 =} BNE LB71C ;$B71C39500 LB72B TYA39510 CMP #$00 ; Worst case problem, 256 bytes data?39520 BEQ LB733 ;$B733>}39530 JMP SKPBYT ;$B6E9 Go skip these bytes39540 LB733 LDA #$80 ; Skip 256 bytes, need two steps39550 JSR W?}RKUPD ;$B75839560 LDA #$8039570 JMP SKPBYT ;$B6E9 Go skip these bytes39580 LB73D LDA (WRKBUF),Y ;$00AB Load@} end of compressed string39590 STA WORK9D ;$009D Store end position index39600 INY39610 LDA (WRKBUF),A}Y ;$00AB Get character to repeat39620 LB744 STA L2E00,X ;$2E0039630 INX39640 CPX SECSIZ ;$0095 End of sectoB}r reached?39650 BEQ LB754 ;$B75439660 CPX WORK9D ;$009D End index reached?39670 BNE LB744 ;$B7443968C}0 INY39690 JMP LB711 ;$B711 Go do uncompressed string again39700 LB754 INY39710 JMP LB72B ;$B72B Go D}do end of sector stuff39720 ;39730 ; Increment the buffer pointer by the number of bytes processed,39740 ; as indicated byE} A.39750 ;39760 WRKUPD CLC39770 ADC WRKBUF ;$00AB39780 STA WRKBUF ;$00AB39790 LDA WRKBUF+1 ;$00AC3F}9800 ADC #$0039810 STA WRKBUF+1 ;$00AC39820 RTS39830 LB764 CMP #$4639840 BNE LB76C ;$B76C39G}850 ;39860 ; Conmpression type $4639870 ; No data. Sector is the same as previous sector.39880 ;39890 TYA39900 H} JMP SKPBYT ;$B6E9 Go skip these bytes39910 LB76C CMP #$4139920 BNE LB783 ;$B78339930 ;39940 ; Conmpression I}type $4139950 ; Copy sector data beginning at a specified position to the beginning.39960 ; Processing puts bytes from end J}to beginning, so the bytes are in39970 ; reversed order. The end portion of the sector remains unchanged.39980 ;39990 K} LDA (WRKBUF),Y ;$00AB40000 TAX40010 LB773 INY40020 LDA (WRKBUF),Y ;$00AB40030 STA L2E00,X ;$2E0L}040040 DEX40050 CPX #$FF40060 BNE LB773 ;$B77340070 INY40080 TYA40090 JMP SKPM}BYT ;$B6E9 Go skip these bytes40100 LB783 CMP #$4440110 BNE LB79A ;$B79A40120 ;40130 ; Compression type $4440140N} ; Copy sector data beginning at a specified position to the end.40150 ; The beginning portion of the sector remains unchangO}ed.40160 ;40170 LDA (WRKBUF),Y ;$00AB40180 TAX40190 LB78A INY40200 LDA (WRKBUF),Y ;$00AB40210 P} STA L2E00,X ;$2E0040220 INX40230 CPX SECSIZ ;$009540240 BNE LB78A ;$B78A40250 INY40260 Q} TYA40270 JMP SKPBYT ;$B6E9 Go skip these bytes40280 ;40290 ; Bad compression type40300 ; Return #$80 in Y, bR}ad bytes in the file.40310 ;40320 LB79A LDY #$8040330 RTS40340 ;40350 ; Show that we are going to write to the dS}isk40360 ;40370 LB79D LDY #$1C40380 LB79F LDA LB2B6,Y ;$B2B6 Writing to destination disk40390 STA L90B8,Y ;$90B8T}40400 DEY40410 BPL LB79F ;$B79F40420 RTS40430 ;40440 ; Process table of sectors40450 ;40460 LB7A9U} LDA #$0040470 STA SECIDX ;$009140480 LDA #L2400 ; Load address of sector buffer40490 STA SECBUF ;$0V}0A940500 LDA /L240040510 STA SECBUF+1 ;$00AA40520 LDA SECSIZ+1 ;$009640530 CLC40540 AW}DC #$0140550 STA WORKA0 ;$00A0 Sector table index increment40560 LDA #$0040570 STA WORK9B ;$009B InitX}ialize last content type to zero40580 STA L906E ;$906E Next sector table entry of last table entry40590 ;40600 ; TeY}st for sector all zeroes40610 ;40620 LB7C3 LDY #$0040630 LB7C5 LDA (SECBUF),Y ;$00A940640 BNE LB7D3 ;$B7D340650Z} INY40660 CPY SECSIZ ;$009540670 BNE LB7C5 ;$B7C540680 LDA #$00 ; Sector is all zeroes40690 [} JMP LB7DC ;$B7DC40700 ;40710 ; Test contents of previous sector40720 ;40730 LB7D3 LDA WORK9B ;$009B Last content t\}ype40740 BEQ LB7DA ;$B7DA Last contents zeroes?40750 LDA #$81 ; Next sequential sector40760 .BYTE #$2]}C ; Fake BIT instruction40770 LB7DA LDA #$80 ; Sector after zeroes40780 ;40790 ; Store content type, also based on conten^}ts of previous sector.40800 ; A = #$00 all zeroes #$80 Sector after zeroes #$81 normal sector40810 ;40820 LB7DC LDX SECID_}X ;$009140830 STA TABCNT,X ;$905C Store content indicator in table40840 STA WORK9B ;$009B Last content type4`}0850 CLC40860 LDA SECBUF ;$00A9 Add sector size to buffer pointer40870 ADC SECSIZ ;$009540880 a}STA SECBUF ;$00A940890 LDA SECBUF+1 ;$00AA40900 ADC SECSIZ+1 ;$009640910 STA SECBUF+1 ;$00AA40920 b} LDA SECIDX ;$009140930 CLC40940 ADC WORKA0 ;$00A0 Add increment40950 STA SECIDX ;$009140960 c} CMP #18 ; End of table?40970 BCC LB7C3 ;$B7C3 not yet40980 ;40990 ; Update table.41000 ; #$00 sector zeroes41d}010 ; #$80 sector non-zero, next sector non-zero, previous sector zeroes41020 ; #$81 sector non-zero, next sector non-zero, e}previous sector non-zero41030 ; #$01 sector non-zero, next sector zeroes, previous sector non-zero41040 ; #$02 sector non-zf}ero, next sector zeroes, previous sector zeroes41050 ;41060 LDY #$00 ; Y = Current sector index41070 LDX WORg}KA0 ;$00A0 Index increment, 1 or 2, X = next sector index41080 LB7FF LDA TABCNT,Y ;$905C41090 BEQ LB818 ;$B818 Secth}or of zeroes? No processing needed41100 AND #$01 ; Type #$80 or #$81 convert to41110 STA WORK9B ;$009B Contei}nt type #$00 or #$0141120 LDA TABCNT,X ;$905C Get type of next sector41130 BPL LB810 ;$B810 Next sector contaj}ins zeroes41140 JMP LB818 ;$B818 Next sector also contains non-zero data41150 LB810 LDA #$02 ; Next sector containsk} zeroes, set sector skip flag41160 SEC41170 SBC WORK9B ;$009B Subtract 0 or 141180 STA TABCNT,Y ;$905l}C Update table with 2 or 141190 LB818 TXA41200 CLC41210 ADC WORKA0 ;$00A0 Adjust next sector index, add incm}rement41220 TAX41230 TYA41240 CLC41250 ADC WORKA0 ;$00A0 Increment current sector index41260n} TAY41270 CPY #18 ; End of table?41280 BCC LB7FF ;$B7FF41290 RTS41300 TABSPD .BYTE $00,$00,$0o}0,$00,$0041310 .BYTE $00,$00,$00,$0041320 LB830 .BYTE $0041330 ;41340 ; Do SIO command41350 ;41360 SIOCMD LDA #p}$0841370 STA CONSOL ;$D01F Clear register41380 LDA CONSOL ;$D01F41390 AND #$06 ; mask for option and q}select41400 BEQ LB85F ;$B85F Option and select keys pressed?41410 LDY DUNIT ;$030141420 LDA TABSPD-1,r}Y ;$B82641430 BEQ LB86A ;$B86A41440 CMP #$28 ; Normal speed?41450 BEQ LB84C ;$B84C41460 JMP Hs}ISIO ;$B8FB41470 LB84C JSR SIOV ;$E45941480 CPY #138 ; Device timeout41490 BNE LB85B ;$B85B41500 LDt}X DUNIT ;$030141510 LDA #$0041520 STA TABSPD-1,X ;$B82641530 LB85B TYA41540 RTS41550 STA Z0u}598 ;$00F641560 LB85F LDX DUNIT ;$030141570 LDA #$28 ; Normal speed41580 STA TABSPD-1,X ;$B82641590 v} JMP SIOV ;$E45941600 LB86A LDY #$0941610 LB86C LDA DCOMND,Y ;$030241620 STA Z0599,Y ;$00E041630 DEY4164w}0 BPL LB86C ;$B86C41650 LDA #$3F ; Get drive speed41660 STA DCOMND ;$030241670 LDA #$40 ; readx} data41680 STA DSTATS ;$030341690 LDA #$0041700 STA DBUFLO ;$030441710 STA DBUFHI ;$03054172y}0 STA DBYTHI ;$030941730 STA DAUX2 ;$030B41740 LDA #$0141750 STA DBYTLO ;$030841760 STz}A DTIMLO ;$030641770 LDA #$2041780 STA DAUX1 ;$030A41790 LDY #$28 ; Normal speed41800 LDX #$0{}641810 LDA #$A0 ; Silent I/O41820 JSR SETSPD ;$B9C341830 BPL LB8DF ;$B8DF No drive41840 LDA #|}$48 ; ???41850 STA DCOMND ;$030241860 LDA #$00 ; no data41870 STA DSTATS ;$030341880 LDY #$28}} ; Normal speed41890 LDX #$0441900 LDA #$A0 ; Silent I/O41910 JSR SETSPD ;$B9C341920 BPL LB8E~}2 ;$B8E2 Warp speed41930 LDA #$D3 ; ???41940 STA DCOMND ;$030241950 LDA #$40 ; read data41960 } STA DSTATS ;$030341970 LDX #$0441980 STX DBYTLO ;$030841990 LDA #$EA42000 STA DBUFLO ;$0304}42010 LDA #$0242020 STA DBUFHI ;$030542030 LDA #$A0 ; Silent I/O42040 LDY #$0F ; Special speed}?42050 JSR SETSPD ;$B9C342060 BPL LB8E5 ;$B8E5 Ultra speed42070 LDA #$28 ; Normal speed42080 }.BYTE #$2C ; Fake BIT instruction42090 LB8DF LDA #$00 ; No drive42100 .BYTE #$2C ; Fake BIT instruction42110 LB8E2} LDA #$10 ; Warp speed42120 .BYTE #$2C ; Fake BIT instruction42130 LB8E5 LDA #$0F ; Ultra speed42140 LDY D}UNIT ;$030142150 STA TABSPD-1,Y ;$B82642160 LDY #$0942170 LB8EF LDA Z0599,Y ;$00E042180 STA DCOMND,}Y ;$030242190 DEY42200 BPL LB8EF ;$B8EF42210 JMP SIOCMD ;$B8310599,Y ;$00E042180 STA DCOMND,W42220 ;42230 ; Hi speed SIO42240 ;42250 HISIO TAY42260 CMP #$1042270 BEQ LB91C ;$B91C42280 LDA DC}OMND ;$030242290 CMP #$21 ; Format42300 BEQ FORMAT ;$B95242310 CMP #$22 ; Format medium42320 }BEQ FORMAT ;$B95242330 LDY DUNIT ;$030142340 LDA TABSPD-1,Y ;$B82642350 CMP #$0F42360 BEQ LB9}38 ;$B93842370 LB915 LDY DUNIT ;$030142380 LDA TABSPD-1,Y ;$B82642390 TAY42400 LB91C LDX #$2142410 } LDA DSTATS ;$030342420 STA LB830 ;$B83042430 LDA #$A8 ; Noisy I/O42440 JSR SETSPD ;$B9C342450 } CPY #138 ; Device timeout42460 BNE LB936 ;$B93642470 LDA LB830 ;$B83042480 STA DSTATS ;$030342490} JMP LB85F ;$B85F42500 LB936 TYA42510 RTS42520 LB938 LDA DCOMND ;$030242530 CMP #$23 ; Format sing}le???42540 BCC LB94F ;$B94F42550 ORA #$8042560 STA DCOMND ;$030242570 JMP LB915 ;$B91542580 }LB947 LDA DCOMND ;$0302 Use UltraSpeed sector skew42590 ORA #$8042600 STA DCOMND ;$030242610 LB94F JMP SIO}V ;$E45942620 ;42630 ; Format command42640 ;42650 FORMAT CPY #$00 ; Single?42660 BEQ LB94F ;$B94F42670 LD}X #LB05D42680 LDY /LB05D42690 JSR PRTSTR ;Use UltraSpeed sector skew?42700 JSR GETCHR ;$93AA42710 } JSR TOUPPR ;$95C842720 CMP #$59 ; 'Y'42730 BEQ LB969 ;$B96942740 LDA #$4E ; 'N'42750 LB969 PHA}42760 JSR PRTCHR ;$939F42770 LDA #$9B42780 JSR PRTCHR ;$939F42790 PLA42800 CMP #$59 ;} 'Y'42810 BEQ LB980 ;$B98042820 LDX #$0D42830 LDY #$28 ; Normal speed42840 LDA #$A8 ; Noisy I}/O42850 JMP SETSPD ;$B9C342860 ;42870 ; Use UltraSpeed sector skew42880 ;42890 LB980 LDY DUNIT ;$030142900 } LDA TABSPD-1,Y ;$B82642910 CMP #$0F ; Special speed?42920 BEQ LB947 ;$B94742930 LDA DCOMND ;$0302}42940 CMP #$21 ; Format42950 BEQ LB998 ;$B99842960 LDX #LBBE2 ; Format enhanced density42970 L}DY /LBBE242980 JMP LB9A8 ;$B9A842990 LB998 LDA DBYTHI ;$0309 Format double density?43000 BEQ LB9A4 ;$B9A4 N}o43010 LDX #LBBC4 ; Format double density43020 LDY /LBBC443030 JMP LB9A8 ;$B9A843040 LB9A4 LDX #LBB}A6 ; Format single density43050 LDY /LBBA643060 LB9A8 STX DBUFLO ;$030443070 STY DBUFHI ;$030543080 } LDA #$66 ; ???43090 STA DCOMND ;$030243100 LDA #$80 ; write data43110 STA DSTATS ;$030343120 } STA DBYTLO ;$030843130 LDA #$0043140 STA DBYTHI ;$030943150 JMP LB915 ;$B91543160 SETSPD STX TSTAT };$031943170 STA NOISE ;$00FF43180 STY SPEED ;$00FE43190 TSX43200 STX Z0623 ;$00FC43210 } SEI43220 LDA #$0243230 STA Z0624 ;$00F743240 LB9D2 LDA TSTAT ;$031943250 STA Z0598 ;$00F643260 L}B9D7 JSR LBB3E ;$BB3E43270 LDA #$3443280 STA PBCTL ;$D30343290 JSR LBA39 ;$BA3943300 JSR LBB}91 ;$BB9143310 BIT DSTATS ;$030343320 BPL LB9ED ;$B9ED43330 JSR LBA39 ;$BA3943340 LB9ED DEC Z0630 ;}$00F543350 JSR LBA89 ;$BA8943360 BIT DSTATS ;$030343370 BVC LBA1A ;$BA1A43380 LDA #$0043390 } STA CHKSUM ;$00F143400 LDY #$1843410 JSR LBABD ;$BABD43420 LDY #$0043430 LBA02 JSR RDSER ;$B}ACE43440 STA (SERBUF),Y ;$00F243450 CLC43460 ADC CHKSUM ;$00F143470 ADC #$0043480 STA} CHKSUM ;$00F143490 INY43500 CPY SERLEN ;$00F443510 BNE LBA02 ;$BA0243520 JSR RDSER ;$BACE43}530 CMP CHKSUM ;$00F143540 BNE LBA77 ;$BA7743550 LBA1A LDA #$A043560 STA AUDC4 ;$D20743570 L}DA POKMSK ;$001043580 STA IRQEN ;$D20E43590 JSR LBABB ;$BABB43600 LDY ERRFLG ;$00F043610 BEQ }LBA32 ;$BA3243620 DEC Z0624 ;$00F743630 BEQ LBA33 ;$BA3343640 JMP LB9D2 ;$B9D243650 LBA32 INY43660} LBA33 CLI43670 STY DSTATS ;$030343680 TYA43690 RTS43700 LBA39 LDX #$FF43710 LBA3B DEX43720 } BNE LBA3B ;$BA3B43730 JSR LBB23 ;$BB2343740 LDY #$0043750 LDA (SERBUF),Y ;$00F243760 STA }CHKSUM ;$00F143770 STA SEROUT ;$D20D43780 LBA4A INY43790 CPY SERLEN ;$00F443800 BEQ LBA5E ;$BA5E43}810 LDA (SERBUF),Y ;$00F243820 JSR WRSER ;$BB0C43830 CLC43840 ADC CHKSUM ;$00F143850 A}DC #$0043860 STA CHKSUM ;$00F143870 JMP LBA4A ;$BA4A43880 LBA5E LDA CHKSUM ;$00F143890 JSR WRSER ;$}BB0C43900 LBA63 LDA IRQST ;$D20E43910 AND #$0843920 BNE LBA63 ;$BA6343930 LDY #$0243940 JSR} LBABD ;$BABD43950 LDA #$C043960 STA IRQEN ;$D20E43970 JMP LBA9A ;$BA9A43980 LBA77 LDA #$8A ; 138 b}reak abort43990 LBA79 STA ERRFLG ;$00F044000 LDX Z0623 ;$00FC44010 TXS44020 BIT Z0630 ;$00F544030 } BMI LBA1A ;$BA1A44040 DEC Z0598 ;$00F644050 BEQ LBA1A ;$BA1A44060 JMP LB9D7 ;$B9D744070 LBA89} LDA DTIMLO ;$030644080 ROR44090 ROR44100 TAY44110 AND #$3F44120 TAX44130 TY}A44140 ROR44150 AND #$C044160 TAY44170 JSR LBABF ;$BABF44180 LBA9A JSR RDCLCK ;$BB2644190 } LDA #$3C44200 STA PBCTL ;$D30344210 JSR RDSER ;$BACE44220 CMP #$41 ; ACK44230 BEQ LBAB}B ;$BABB44240 CMP #$43 ; COMPLT44250 BEQ LBABB ;$BABB44260 CMP #$45 ; ERROR44270 BEQ LBAB6 ;$}BAB644280 LDA #$8B ; 139 Device NAK44290 JMP LBA79 ;$BA7944300 LBAB6 LDA #$90 ; error44310 STA ERRF}LG ;$00F044320 RTS44330 LBABB LDY #$00 ; I/O okay44340 LBABD LDX #$0044350 LBABF LDA #$7744360 STA CDTM}A1 ;$022644370 LDA #$BA44380 STA CDTMA1+1 ;$022744390 LDA #$0144400 JMP SETVBV ;$E45C44410 R}DSER LDA #$20 ; serial input data ready mask44420 BIT IRQST ;$D20E44430 BPL LBAF1 ;$BAF1 Break pressed?4444}0 BNE RDSER ;$BACE No data yet44450 LDA #$DF ; Turn off serial input data ready44460 STA IRQEN ;$D20E}44470 LDA #$F8 ; Turn off timer 1 2 and 4 interrupts44480 STA IRQEN ;$D20E44490 LDA SKSTAT ;$D20F4450}0 STA SKRES ;$D20A reset serial port status register44510 BPL LBB07 ;$BB0744520 AND #$20 ; Keyboard ov}er-run44530 BEQ LBB04 ;$BB0444540 LDA SERIN ;$D20D44550 RTS44560 LBAF1 LDA #$5F44570 STA IR}QEN ;$D20E44580 LDA #$F844590 STA IRQEN ;$D20E44600 LDA #$0144610 STA Z0624 ;$00F744620 } DEC Z0630 ;$00F544630 LDA #$80 ; 128 Break abort44640 .BYTE #$2C ; Fake BIT instruction44650 LBB04 LDA #}$8E ; 142 Serial bus overrun44660 .BYTE #$2C ; Fake BIT instruction44670 LBB07 LDA #$8C ; 140 Serial frame error44}680 JMP LBA79 ;$BA7944690 WRSER PHA44700 LBB0D LDA IRQST ;$D20E44710 AND #$10 ; Serial output data needed}44720 BNE LBB0D ;$BB0D44730 LDA #$EF ; Break44740 STA IRQEN ;$D20E44750 LDA #$F8 ; Timer 1 2 a}nd 444760 STA IRQEN ;$D20E44770 PLA44780 STA SEROUT ;$D20D44790 RTS44800 WRCLCK LDA #$23 ; S}et provide clock mode44810 .BYTE #$2C ; Fake BIT instruction44820 RDCLCK LDA #$13 ; Set receive clock mode44830 } STA SKCTL ;$D20F44840 STA SKRES ;$D20A44850 LDA #$2844860 STA AUDCTL ;$D20844870 LDA NOIS}E ;$00FF44880 STA AUDC4 ;$D20744890 LDA #$F844900 STA IRQEN ;$D20E44910 RTS44920 LBB3E LDA }DUNIT ;$030144930 ORA #$3044940 STA Z0662 ;$00F844950 LDA DAUX1 ;$030A44960 STA Z0663 ;$00FA}44970 LDA DAUX2 ;$030B44980 STA Z0664 ;$00FB44990 LDA DCOMND ;$030245000 STA Z0665 ;$00F94501}0 BPL LBB59 ;$BB5945020 JMP LBB78 ;$BB7845030 LBB59 LDA SPEED ;$00FE45040 CMP #$10 ; Warp speed4505}0 BNE LBB7A ;$BB7A45060 LDA DCOMND ;$030245070 CMP #$52 ; Read45080 BEQ LBB74 ;$BB7445090 } CMP #$50 ; Write45100 BEQ LBB74 ;$BB7445110 CMP #$57 ; Write verify45120 BEQ LBB74 ;$BB7445130 } PLA45140 PLA45150 CLI45160 JMP SIOV ;$E45945170 LBB74 ORA #$2045180 STA Z0665 ;$00F9}45190 LBB78 LDA #$2845200 LBB7A STA AUDF3 ;$D20445210 LDA #$0045220 STA AUDF4 ;$D20645230 STA ERRF}LG ;$00F045240 STA SERBUF+1 ;$00F345250 STA Z0630 ;$00F545260 LDA #$F845270 STA SERBUF ;$00F2}45280 LDA #$0445290 STA SERLEN ;$00F445300 RTS45310 LBB91 LDA DBUFLO ;$030445320 STA SERBUF} ;$00F245330 LDA DBUFHI ;$030545340 STA SERBUF+1 ;$00F345350 LDA DBYTLO ;$030845360 STA SERLE}N ;$00F445370 LDA SPEED ;$00FE45380 STA AUDF3 ;$D20445390 RTS45400 ;45410 ; 12 byte drive config ta}ble45420 ; 18/26 byte sector skew table45430 ;45440 ; off description value45450 ; ------------------------------}45460 ; 0 tracks 4045470 ; 1 steprate 145480 ; 2 sectors hi 045490 ; 3 sectors lo } 18/2645500 ; 4 number of heads 0=1 head45510 ; 5 recording mode 0=FM/4=MFM45520 ; 6 bytes/sector hi }1=256/0=12845530 ; 7 bytes/sector lo 0=256/128=12845540 ;45550 ; Single density45560 ;45570 LBBA6 .BYTE #40,#1,#0,}#18,#0,#0,#0,#12845580 .BYTE #255,#0,#0,#045590 .BYTE #4,#8,#12,#16,#1,#5,#9,#1345600 .BYTE #17,#2,#6},#10,#14,#18,#3,#7,#11,#1545610 ;45620 ; Double density45630 ;45640 LBBC4 .BYTE #40,#1,#0,#18,#0,#4,#1,#045650 .}BYTE #255,#0,#0,#045660 .BYTE #1,#10,#8,#17,#6,#15,#4,#1345670 .BYTE #2,#11,#9,#18,#7,#16,#5,#14,#3,#1245680} ;45690 ; Enhanced density45700 ;45710 LBBE2 .BYTE #40,#1,#0,#26,#0,#4,#0,#12845720 .BYTE #255,#0,#0,#045730 } .BYTE #4,#8,#12,#16,#20,#24,#1,#545740 .BYTE #9,#13,#17,#21,#25,#2,#6,#10,#14,#1845750 .BYTE #22,#26,#3,#}7,#11,#15,#19,#2345760 ;45770 ; Erase the screen45780 ;45790 PRTCLS LDA #$0145800 STA CRSINH ;$02F045810 }LDA #$9B45820 JSR PRTCHR ;$939F45830 LDA #$7D ; Clear45840 JSR PRTCHR ;$939F45850 LDA #$0045}860 STA CRSINH ;$02F045870 RTS45880 BRK45890 .END JSR PRTCHR ;$939F45850 LDA #$0045Q04,˩0̩4Hͱ8E͑JH`ztĺ|rljd2@JDuqeYYUeiYUUeiYUUieb\Rf`ZT%}!¼  h VP82,̈~vpjd%!RL bf)ڏHB<ܘ~ezt%!ľД΂|vp.XRLaب~e%!+} BfmoXoOfOO3/hb\f~eႱhfXVXf]xrl`H~e,"*$"ڦU|Ѷ̱~D<}Ѫ񞘒\Rs))%)%%)%%!B<60*$  沬ΎY%!RLF@:4.(" }ԥ¼r0*$SYe%!b\VPJD>8&L0 F.Ye %!rlf`¼q ,V>Ye& |v2} !*fNe60*$ᒌ1⎩ʎi2,& OpjdؙF@:4ᢜ,rlf`&TNHB<60*$ -1虥VPJDᲬQUJ F@:4.(}).f`ZT%!q0*mp=phb\VPJD>ЏvmpgYvpjd%!RLF@o0.%.f`ZTNHieUYiNezt%!b\ieeYY͂(pjd^XLm}qe%!-¼Kztnh ľe$   eO~:1feDܵO5H  }C  OO DlqfWzt|vp~xrP6RDRLF0{umo˅rudgyzoozztnhB۲Jz:0b4X䥒-0:1}#jҧ1{"[MI:1ޕlUmNUp-hII sP, IuCLv$2/RõQپ`鿰8}1;1%?Q5>QoM}5PQImq 5Ǯ)LX$ڌٷu$7$0:=:a)\l297;NWtTZǒh-RRXŲ|,t*9G|Eџ(1}NUhURx\P5%l3YHRSTcqkv"H1-U1@I8VAd:pU`Re&ƺVũiTնż@9틉;,I@ } 5D%=U=Q[V=UDᠣp=ѩpdh@2` 09Bp{)i jA1Ix-P-Qd:@ECcRkɛ-)lçLBV}<-@m\L1~ $[@A4*H[]l Pě-Ϩ ېX}ۛpihvozya`pu}sH } Peniqu##RrtoĉYEor(9$}vlinmmyB<`ۘonkorďГrekxuĊ[riminux@zP}h$fuly, .R* F $ ,$%؉)M#l$(c @[Ic5$U$8p  I#)SM#_S_c_k_[_cQ}0覑'HTB֩C\ݒ[hkݭ{մ!D)$YpVRQ]5aI]Y^aHMPV=`$B85b5 56*RZ^$*;cF;W}}I5\S`b@ ݜ e,*y@L ݘMq$M-2FUP C0pqs|@$p.Q@p(9epMqL ?}$+9;ICSSYhcfsX(21