There is a technikal reason: That's the physical page size of (some) of the flash chips used.
Bank : EF Address : C64Load Address : File Name $18 $8000 $1234 HS_01 $18 $8100 $4567 HS_02 . . . $18 $9100 $7890 HS_18
Bank : EF Address : C64Load Address : File Name $18 $8000 $0000 HS_01 $18 $8100 $4567 HS_02 . . . $18 $9100 $7890 HS_18 $19 $8000 $1234 HS_01
;Sample Save Routine - Knight Rider Example #2 ;------------------------------------------- ; Switch Bank - lda zpBANK ;Some zero page address jsr EAPISETBANK ; Read The Destination Address From The EasyFlash ldy #$01 lda (pDestL),y ; pDestL is $8000 or whatever sta zpSavAH ; H Start address during SAVE dey lda (pDestL),y ; pDestL is $8000 or whatever sta zpSavAL ; L Start address during SAVE ; If it is not ZERO then overwrite bne SEFJ1 ; Overwrite Old Save image lda zpSavAH ; H Start address during SAVE bne SEFJ1 ; Overwrite Old Save image ; It is ZERO, increment the bank inc zpBANK ;Some zero page address ; Loop bne - ; Short JMP ;------------------------------------------- ; Overwrite Old Save image SEFJ1 ;Set The Pointer jsr SETPTR ;EAPISETPTR ;Erase The Header txa ;X is #$00 jsr EAPIWRITEFLASHINC jsr EAPIWRITEFLASHINC ;Switch Bank lda zpBANK ;Some zero page address clc adc #$01 ;Check That We Are Still In Bounds cmp zpBANKe ;End Bank bne + ;Switch Bank lda zpBANKs ;Start Bank jsr EAPISETBANK ;Erase The Sector ldy pDestH ;ie >$8000 or whatever jsr EAPIERASESECTOR jmp SEFJ2 ; Write New Save image ;Set The New Bank + jsr EAPISETBANK ;------------------------------------------- ; Write New Save image SEFJ2 ;Set The Pointer jsr SETPTR ;EAPISETPTR ;Reset Save Start lda zpSavAL ; L Start address during SAVE jsr EAPIWRITEFLASHINC ;Set Up The Needed Header lda zpSavAH ; H Start address during SAVE jsr EAPIWRITEFLASHINC ;Set Up The Needed Header ;Save The Bytes ldy #$00 - inc $01 ;ie $38 lda (zpSavAL),y ; Start address during SAVE dec $01 ;ie $37 jsr EAPIWRITEFLASHINC inc zpSavAL ; L Start address during SAVE lda zpSavAL ; L Start address during SAVE bne + inc zpSavAH ; H Start address during SAVE + lda zpSavAH ; H Check If The End Has Been Reached cmp zpSavEH ; H End address for SAVE bne - lda zpSavAL ; L Start address during SAVE cmp zpSavEL ; L End address for SAVE bne -