$E31C/58140: Expand side-sector
Jump from $E0E5:
E31C: 20 D3 D1 JSR $D1D3 ; get drive number
E31F: 20 CB E1 JSR $E1CB ; get last side-sector
E322: 20 9C E2 JSR $E29C
E325: 20 7B CF JSR $CF7B
E328: A5 D6 LDA $D6
E32A: 85 87 STA $87
E32C: A5 D5 LDA $D5 ; side-sector number
E32E: 85 86 STA $86
E330: A9 00 LDA #$00
E332: 85 88 STA $88
E334: A9 00 LDA #$00
E336: 85 D4 STA $D4
E338: 20 0E CE JSR $CE0E ; calculate side-sector number and pointer
Jump from $CA85:
E33B: 20 4D EF JSR $EF4D ; number of free blocks
E33E: A4 82 LDY $82 ; channel number
E340: B6 C7 LDX $C7,Y ; record length
E342: CA DEX
E343: 8A TXA
E344: 18 CLC
E345: 65 D7 ADC $D7 ; plus pointer in data block
E347: 90 0C BCC $E355
E349: E6 D6 INC $D6
E34B: E6 D6 INC $D6 ; increment pointer to end by 2
E34D: D0 06 BNE $E355
E34F: E6 D5 INC $D5 ; increment side-sector number
E351: A9 10 LDA #$10
E353: 85 D6 STA $D6 ; set pointer to 16
Jump from $E347, $E34D:
E355: A5 87 LDA $87
E357: 18 CLC
E358: 69 02 ADC #$02
E35A: 20 E9 DE JSR $DEE9 ; set buffer pointer for side-sector
E35D: A5 D5 LDA $D5 ; side-sector number
E35F: C9 06 CMP #$06
E361: 90 05 BCC $E368 ; smaller than 6?
Jump from $E394, $E39B:
E363: A9 52 LDA #$52
E365: 20 C8 C1 JSR $C1C8 ; 52, 'file too large'
Jump from $E361:
E368: A5 D6 LDA $D6 ; end pointer
E36A: 38 SEC
E36B: E5 87 SBC $87 ; minus last end pointer
E36D: B0 03 BCS $E372
E36F: E9 0F SBC #$0F ; minus 16
E371: 18 CLC
Jump from $E36D:
E372: 85 72 STA $72
E374: A5 D5 LDA $D5 ; side-sector number
E376: E5 86 SBC $86 ; minus last side-sector number
E378: 85 73 STA $73 ; save
E37A: A2 00 LDX #$00
E37C: 86 70 STX $70 ; erase sum for calculation
E37E: 86 71 STX $71
E380: AA TAX
E381: 20 51 DF JSR $DF51 ; calculate block # of rel-file
E384: A5 71 LDA $71
E386: D0 07 BNE $E38F
E388: A6 70 LDX $70
E38A: CA DEX
E38B: D0 02 BNE $E38F
E38D: E6 88 INC $88
Jump from $E386, $E38B:
E38F: CD 73 02 CMP $0273 ; block number of rel-file
E392: 90 09 BCC $E39D ; greater than free blocks on disk?
E394: D0 CD BNE $E363 ; 52, 'file too large'
E396: AD 72 02 LDA $0272
E399: C5 70 CMP $70
E39B: 90 C6 BCC $E363 ; 52, 'file too large'
Jump from $E392:
E39D: A9 01 LDA #$01
E39F: 20 F6 D4 JSR $D4F6 ; get byte from buffer
E3A2: 18 CLC
E3A3: 69 01 ADC #$01 ; plus 1
E3A5: A6 82 LDX $82
E3A7: 95 C1 STA $C1,X ; as write pointer
E3A9: 20 1E F1 JSR $F11E ; find free block in BAM
E3AC: 20 FD DD JSR $DDFD ; track and sector in buffer
E3AF: A5 88 LDA $88
E3B1: D0 15 BNE $E3C8 ; only one block needed?
E3B3: 20 5E DE JSR $DE5E ; write block
Jump from $E40D, $E414:
E3B6: 20 1E CF JSR $CF1E ; change buffer
E3B9: 20 D0 D6 JSR $D6D0 ; transmit parameter to disk controller
E3BC: 20 1E F1 JSR $F11E ; find free block in BAM
E3BF: 20 FD DD JSR $DDFD ; track and sector in buffer
E3C2: 20 E2 E2 JSR $E2E2 ; erase buffer
E3C5: 4C D4 E3 JMP $E3D4
Jump from $E3B1, $E416:
E3C8: 20 1E CF JSR $CF1E ; change buffer
E3CB: 20 D0 D6 JSR $D6D0 ; transmit parameter to disk controller
E3CE: 20 E2 E2 JSR $E2E2 ; erase buffer
E3D1: 20 19 DE JSR $DE19 ; zero byte and end pointer in buffer
Jump from $E3C5:
E3D4: 20 5E DE JSR $DE5E ; write block
E3D7: 20 0C DE JSR $DE0C ; get track and sector
E3DA: A5 80 LDA $80 ; track
E3DC: 48 PHA
E3DD: A5 81 LDA $81 ; and sector
E3DF: 48 PHA ; save
E3E0: 20 3E DE JSR $DE3E ; get track and sector from disk
E3E3: A5 81 LDA $81 ; controller
E3E5: 48 PHA
E3E6: A5 80 LDA $80 ; save track and sector
E3E8: 48 PHA
E3E9: 20 45 DF JSR $DF45 ; set buffer pointer for side-sector
E3EC: AA TAX
E3ED: D0 0A BNE $E3F9 ; pointer not zero?
E3EF: 20 4E E4 JSR $E44E ; write side-sector
E3F2: A9 10 LDA #$10
E3F4: 20 E9 DE JSR $DEE9 ; buffer pointer to 16
E3F7: E6 86 INC $86 ; increment side-sector number
Jump from $E3ED:
E3F9: 68 PLA
E3FA: 20 8D DD JSR $DD8D ; track in side-sector
E3FD: 68 PLA
E3FE: 20 8D DD JSR $DD8D ; sector in side-sector
E401: 68 PLA
E402: 85 81 STA $81 ; sector
E404: 68 PLA
E405: 85 80 STA $80 ; and get track back
E407: F0 0F BEQ $E418 ; no more blocks?
E409: A5 86 LDA $86 ; side-sector number
E40B: C5 D5 CMP $D5 ; changed?
E40D: D0 A7 BNE $E3B6 ; yes
E40F: 20 45 DF JSR $DF45 ; set buffer pointer in side-sector
E412: C5 D6 CMP $D6 ; end pointer
E414: 90 A0 BCC $E3B6 ; smaller?
E416: F0 B0 BEQ $E3C8 ; same
Jump from $E407:
E418: 20 45 DF JSR $DF45 ; set buffer pointer in side-sector
E41B: 48 PHA
E41C: A9 00 LDA #$00
E41E: 20 DC DE JSR $DEDC ; buffer pointer to zero
E421: A9 00 LDA #$00
E423: A8 TAY
E424: 91 94 STA ($94),Y ; zero as track number
E426: C8 INY
E427: 68 PLA ; end pointer
E428: 38 SEC
E429: E9 01 SBC #$01 ; minus one
E42B: 91 94 STA ($94),Y ; as sector
E42D: 20 6C DE JSR $DE6C ; write block
E430: 20 99 D5 JSR $D599 ; and verify
E433: 20 F4 EE JSR $EEF4 ; update BAM
E436: 20 0E CE JSR $CE0E ; update pointer for rel-file
E439: 20 1E CF JSR $CF1E ; change buffer
E43C: 20 F8 DE JSR $DEF8 ; right side-sector?
E43F: 70 03 BVS $E444 ; no
E441: 4C 75 E2 JMP $E275
Jump from $E43F:
E444: A9 80 LDA #$80
E446: 20 97 DD JSR $DD97 ; set bit 7
E449: A9 50 LDA #$50
E44B: 20 C8 C1 JSR $C1C8 ; 50, 'record not present'
Previous Page / Next Page