$DCDA/56538: Construct a new block
Jump from $D48A, $D902, $D9E9:
DCDA: 20 A9 F1 JSR $F1A9 ; find free sector in BAM
DCDD: A9 01 LDA #$01
DCDF: 20 DF D1 JSR $D1DF ; open channel
DCE2: 20 D0 D6 JSR $D6D0 ; transmit parameter to disk controller
DCE5: 20 B6 DC JSR $DCB6 ; reset pointer
DCE8: A6 82 LDX $82 ; channel number
DCEA: AD 4A 02 LDA $024A ; file type
DCED: 48 PHA
DCEE: 0A ASL
DCEF: 05 7F ORA $7F ; drive number
DCF1: 95 EC STA $EC,X ; save as flag
DCF3: 68 PLA
DCF4: C9 04 CMP #$04 ; rel-file?
DCF6: F0 05 BEQ $DCFD ; yes
DCF8: A9 01 LDA #$01
DCFA: 95 F2 STA $F2,X ; set WRITE flag
DCFC: 60 RTS
Jump from $DCF6:
DCFD: A4 83 LDY $83 ; secondary address
DCFF: B9 2B 02 LDA $022B,Y ; channel number in table
DD02: 29 3F AND #$3F ; erase the top two bits
DD04: 09 40 ORA #$40 ; set bit 6
DD06: 99 2B 02 STA $022B,Y ; READ and WRITE flag
DD09: AD 58 02 LDA $0258 ; record length
DD0C: 95 C7 STA $C7,X ; in table
DD0E: 20 8E D2 JSR $D28E ; find buffer
DD11: 10 03 BPL $DD16 ; found?
DD13: 4C 0F D2 JMP $D20F ; 70, 'no channel'
Jump from $DD11:
DD16: A6 82 LDX $82 ; channel number
DD18: 95 CD STA $CD,X ; buffer number for side-sector
DD1A: 20 C1 DE JSR $DEC1 ; erase buffer
DD1D: 20 1E F1 JSR $F11E ; find free block in BAM
DD20: A5 80 LDA $80 ; track
DD22: 8D 59 02 STA $0259 ; for side-sector
DD25: A5 81 LDA $81 ; sector
DD27: 8D 5A 02 STA $025A ; for side-sector
DD2A: A6 82 LDX $82 ; channel number
DD2C: B5 CD LDA $CD,X ; buffer number
DD2E: 20 D3 D6 JSR $D6D3 ; transmit parameter to disk controller
DD31: A9 00 LDA #$00
DD33: 20 E9 DE JSR $DEE9 ; buffer pointer to zero
DD36: A9 00 LDA #$00
DD38: 20 8D DD JSR $DD8D
DD3B: A9 11 LDA #$11 ; 17
DD3D: 20 8D DD JSR $DD8D ; as end pointer in buffer
DD40: A9 00 LDA #$00 ; zero
DD42: 20 8D DD JSR $DD8D ; as side-sector number in buffer
DD45: AD 58 02 LDA $0258 ; record length
DD48: 20 8D DD JSR $DD8D ; in buffer
DD4B: A5 80 LDA $80 ; track number of this block
DD4D: 20 8D DD JSR $DD8D ; in buffer
DD50: A5 81 LDA $81 ; sector number
DD52: 20 8D DD JSR $DD8D ; in buffer
DD55: A9 10 LDA #$10 ; 16
DD57: 20 E9 DE JSR $DEE9 ; buffer pointer to 16
DD5A: 20 3E DE JSR $DE3E ; get track and sector number
DD5D: A5 80 LDA $80 ; track number of the first data block
DD5F: 20 8D DD JSR $DD8D ; in buffer
DD62: A5 81 LDA $81 ; sector number of the first data block
DD64: 20 8D DD JSR $DD8D ; in buffer
DD67: 20 6C DE JSR $DE6C ; write block to disk
DD6A: 20 99 D5 JSR $D599 ; and check
DD6D: A9 02 LDA #$02
DD6F: 20 C8 D4 JSR $D4C8 ; buffer pointer to 2
DD72: A6 82 LDX $82 ; channel number
DD74: 38 SEC
DD75: A9 00 LDA #$00
DD77: F5 C7 SBC $C7,X ; record length
DD79: 95 C1 STA $C1,X ; pointer for writing
DD7B: 20 E2 E2 JSR $E2E2 ; erase buffer
DD7E: 20 19 DE JSR $DE19 ; write link bytes in buffer
DD81: 20 5E DE JSR $DE5E ; write block to disk
DD84: 20 99 D5 JSR $D599 ; and check
DD87: 20 F4 EE JSR $EEF4 ; write BAM
DD8A: 4C 98 DC JMP $DC98 ; and done
Previous Page / Next Page