* * Krue's music disk * * (c) 2011, Brutal Deluxe Software * mx %11 org $1000 lst off typ BIN dsk DATA/PROGRAM * * $0800 : menu.txt * $0c00 : prodos buffer * $1000 : main program * $2000 : hgr * $4000 : hgr2 * $4000 : music info * $6000 : icons * $7000 : musics * *----------------------------- * COMMON EQUATES *----------------------------- PUT EQUATES *----------------------------- * MAIN *----------------------------- JSR initALL JSR playALL JMP quitALL *----------------------------- * PERFORM ALL INITS *----------------------------- initALL = * JSR iigsOFF * Load menu page at $0800 LDA #>ptrMENU LDX #>strMENUTXT LDY #ptrHGR2 LDX #>strMENU LDY #ptrHGR2 STA HPAG JSR displayMENU JSR showHGR * Manage the menu LDA #>ptrHGR1 STA HPAG JSR handleMENU RTS *----------------------------- * ANALYZE MENU *----------------------------- * * Format of the text file is: * MENU NAME, * ICON PATH, * PATH NAME TO MUSIC, * PATH NAME TO MUSIC INFO, * MESSAGE, * TEMPO (0..9) * analyzeMENU = * LDA #0 STA nbMUSIC * Start of MENU.TXT file LDA #ptrMENU STA zpDEP+1 * Work on the icon info LDA #ptrICONS STA proREAD+3 * Set pointer to destination buffer ]LP LDA nbMUSIC ASL TAX LDA tblENTRY,X STA zpARR LDA tblENTRY+1,X STA zpARR+1 * Handle one line and loop JSR handleLINE BCS analyze90 INC nbMUSIC BNE ]LP * Prepare menu limits analyze90 LDA nbMUSIC ; We may have less than 3 songs CMP nbMITEMS ; We must then limit the number to display BCS analyze99 STA nbMITEMS SEC SBC #1 STA nbMAXITEMS analyze99 RTS *----------- handleLINE = * * First check EOF value LDY #0 LDA (zpDEP),y CMP #chrEOF BNE handleOK SEC RTS * Copy address of song name handleOK LDA zpDEP ; Y=0 STA (zpARR),Y INY ; 1 LDA zpDEP+1 STA (zpARR),y JSR nextSEP * Copy address of icon path name JSR loadICON ; load icon ; we assume icon exists!!! LDY #iICON ; 2 LDA proREAD+2 ; ptr to icon file STA (zpARR),Y INY ; 3 LDA proREAD+3 STA (zpARR),y LDA proREAD+2 ; calculate CLC ; next address ADC proREAD+4 ; for STA proREAD+2 ; next icon LDA proREAD+3 ADC proREAD+5 STA proREAD+3 JSR nextSEP * Copy address of music path name LDY #iMUSIC ; 4 LDA zpDEP STA (zpARR),Y INY ; 5 LDA zpDEP+1 STA (zpARR),y JSR nextSEP * Copy address of music info path name INY ; 6 LDA zpDEP STA (zpARR),Y INY ; 7 LDA zpDEP+1 STA (zpARR),y JSR nextSEP * Copy address of message INY ; 8 LDA zpDEP STA (zpARR),Y INY ; 9 LDA zpDEP+1 STA (zpARR),y JSR nextSEP * Copy address of tempo INY ; 10 LDA zpDEP STA (zpARR),Y INY ; 11 LDA zpDEP+1 STA (zpARR),y JSR nextSEP CLC ; Say "Good" RTS *----------- nextSEP TYA ; Save Y PHA ]LP JSR nextDEP ; Move to next menu char LDY #0 ; Do we have a separator? LDA (zpDEP),Y CMP #chrCOMMA ; Yes, a comma or a return BEQ nextSEP99 CMP #chrRET BEQ nextSEP99 CMP #chrEOF ; or a $ BNE ]LP ; Otherwise, loop JSR nextDEP ; A trick for song name nextSEP99 PLA ; Restore Y TAY *----------- NOTE: no RTS above, done on purpose nextDEP INC zpDEP ; Move pointer BNE nextDEP99 INC zpDEP+1 nextDEP99 RTS *----------------------------- loadICON = * LDY #0 ]LP LDA (zpDEP),Y CMP #chrCOMMA BEQ loadICON1 STA strMUSIC+1,Y INY BNE ]LP loadICON1 STY strMUSIC ; The pathname length * Load the icon LDX #>strMUSIC LDY #ptrMINFO LDX #>strMUSIC LDY #ptrMINFO STA zpFROM+1 LDA #ptrTEXT STA zpTO+1 jsr copyrow jsr copyrow jsr copyrow jsr copyrow jsr copyrow jsr copyrow jsr copyrow jsr copyrow ;]lp LDY #0 ;LDA (zpFROM),y ;CMP #chrEOF ;BEQ textSONGok ;ORA #$80 ; Set bit 7 ;JSR COUT ; Print out char ;INC zpFROM ; Loop until ;INC zpTO ; end of file ;BNE ]lp ; end of text page 1 ;INC zpFROM+1 ; or $ encountered ;INC zpTO+1 ;LDA zpTO+1 ;CMP #>ptrMENU ;BCC ]lp *----------- Handle music textSONGok LDY #iMUSIC LDA (zpDEP),Y STA zpARR INY LDA (zpDEP),Y STA zpARR+1 * Now copy string LDY #0 ]LP LDA (zpARR),Y CMP #chrCOMMA BEQ playSONG2 STA strMUSIC+1,Y INY BNE ]LP playSONG2 STY strMUSIC ; The pathname length * Load the music song at $7000 LDA #>ptrMUSIC LDX #>strMUSIC LDY #