Direct Converter | Chapter 13 of this issue introduces the Direct Converter, a routine which transfers the SID data of a C64 native music from their original registers ($D400) to the SIDcard's main registers ($FD40). According to Solder, which has written this article, this advanced routine must supersede the original data transfer routine included in the Synergy SIDcard Software suite disks, which had been spread with the Solder's SID Card, where the original SID data registers were simply copied into the SIDcard ones at the very end of the music file's running into the interrupt. The old routine doesn't keep in count the data handling in the SID registers which may occur within the routine itself.
Direct Converter recognizes and literally changes the real register's addresses calls written into the SID file. The same result can be achieved by using software like Sid Converter by Skoro, or modern PC tools like SID To Plus4 by Dale, or PSID2BIN by Bionic. ---
Before running this routine, change $9B/$9C values, according to LO/HI bytes of the beginning address of the SID file. .BA$0700,$7700 ;BASE ADDRESS $700 SEI ;INTERRUPT DISABLE STA$FF3F ;IF DATA UNDER ROM LDA$9B ;SWITCH TO RAM STA$D8 ;LOADING ADDRESS SAVE IN LDA$9C ;D8/D9 (POINT TO BE- ;ERROR CODE) STA$D9 LDA#$02 ;TO ORIGINAL POINT TWO CLC ;ADD (POINTS TO ADC$9B ;HIGHBYTE ($D4XX)) STA$9B BCCL0717 INC$9C L0717 LDY#$00 ;START OF ROUTINE L0719 LDA($D8),Y ;FET BYTE CMP#$8D ;CODE FOR STA$ADRE BEQL0741 ;/YES CMP#$99 ;CODE FOR STA$ADRE,Y BEQL0741 ;/YES CMP#$9D ;CODE FOR STA$ADRE,X BEQL0741 ;/YES CMP#$8C ;CODE FOR STY$ADRE BEQL0741 ;/YES CMP#$8E ;CODE FOR STX$ADRE BEQL0741 ;/YES L072F INY ;OTHERWISE NEXT BYTE BNEL0719 INC$9C ;IN BUNDLE POINT INC$D9 ;CALCULATE ACCORDINGLY LDA$9C ;END REACHED? CMP$9E BCCL0719 ;/NOT YET STA$FF3E ;SWITCH TO ROM CLI ;ALLOW INTERRUPT BRK ;BACK IN MONITOR L0741 LDA($9B),Y ;HIGHBYTE TO COMMAND ;GET CODE CMP#$D4 ;$D4 FOR $D4XX ? BNEL072F ;/NO, NOT CONVERTED. INY ;POINT CORR. BNEL074E INC$D9 INC$9C L074E LDA($D8),Y ;IF EVERYTHING IS RIGHT, ;FET LOW BYTE AND ORA#$40 ;FROM 00-18 TO 40-58 STA($D8),Y ;CONVERT INY ;POINT TO HIGH BYTE BNEL075B ;SET INC$D9 INC$9C L075B LDA#$FD ;LOAD $FD STA($D8),Y ;AND WRITE TO RAM BNEL072F ;CONVERSION PROCESS ;COMPLETE BRK ;END OF ROUTINE |
|