UPDATE.LS.S (1589B)
1 lst off 2 3 org $300 4 5 * 6 * loresshow:0C00.0FFF ($400) 7 * framedata:1000.6BFF ($5C00) 8 * 9 * buffer18 :6C00.7DFF ($1200 one track) 10 * rw18.d000:7E00.82FF ($500 moved to aux ramcard) 11 * 12 13 BbundID = $AD 14 15 loresshow = $c00 16 buffer18 = $6c00 17 18 rw18 = $d000 19 rw18temp = $7e00 20 21 slot = $FD 22 track = $FE 23 lastrack = $FF 24 25 startrack = 12 ;last 6 sectors here 26 27 * 13,14,15,16,17 (5 full tracks here) 28 29 errcode = 0 30 31 start jsr $e74c ;get slot# 32 txa 33 asl 34 asl 35 asl 36 asl 37 38 sta $C009 ;aux zpage, ramcard 39 sta slot 40 41 bit $C083 42 bit $C083 43 44 * Move rw18 to its home 45 46 ldx #>rw18temp 47 ldy #>rw18 48 lda #5 49 jsr movedata 50 51 * Now we can use rw18 52 53 jsr rw18 54 db 7,BbundID 55 56 jsr rw18 57 db 0,5,1 ;drive on 58 59 jsr rw18 ;seek to startrack 60 db 2,1,startrack 61 62 * handle special track with 63 64 jsr rw18 65 db 3 ;read in original data 66 db >buffer18 67 lda #1 68 bcs :error 69 70 * update last 6 sectors 71 72 ldx #>loresshow 73 ldy #>buffer18+$C00 74 lda #6 75 jsr movedata 76 77 * write it back out 78 79 jsr rw18 80 db 5 ;writesequ 81 db >buffer18 82 lda #2 83 bcs :error 84 85 * write out rest of data... 86 87 lda #>loresshow+$600 88 :wloop sta :buf 89 90 inc track 91 92 jsr rw18 93 db 5 ;writesequ 94 :buf db $11 95 lda #2 96 bcs :error 97 98 lda :buf 99 adc #$12 100 cmp #>loresshow+$600+{5*$1200} 101 bne :wloop 102 103 lda #0 104 105 :error pha 106 jsr rw18 107 db 1 ;drive off 108 pla 109 110 sta $C008 111 bit $C081 112 sta errcode 113 rts 114 115 *------------------------------------------------- movedata 116 * 117 * Move data: x:source, y:dest, a:length 118 * 119 120 movedata stx :src+2 121 sty :dst+2 122 tax 123 124 ldy #0 125 :loop 126 :src lda $1100,y 127 :dst sta $1100,y 128 iny 129 bne :loop 130 131 inc :src+2 132 inc :dst+2 133 134 dex 135 bne :loop 136 137 rts 138 139 *------------------------------------------------- EOF