$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 |