$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