Perfidia

Developer(s): Joan Kealy
Date: 198x
Type: Program
Platform(s): TS 2068
Tags: Music

Perfidia plays Alberto Domínguez’s bolero on the TS2068. The melody is played with BEEP, and the TS2068’s AY sound chip plays the chords under it: C major, E major, G major, D minor and A minor, each set up by a short SOUND subroutine. The screen shows only the title, “P E R F I D I A de ALBERTO DOMINGUEZ”.

The REM reads “Prepared for the TS2068 by Joan Kealy”. The same arrangement, almost line for line, is the Perfidia section of the four-song medley Espanola; this is the single-song version.

Program Analysis

Program Structure

  • Lines 405–490 are the score: BEEP notes, some phrases read from DATA after a RESTORE, with GO SUBs to the chord routines.
  • Line 1000 turns the chip on (mixer, volumes, envelope period); 1015–1055 load the three tone registers for each chord; 1999 turns it off.

Notable Techniques

  • Volume changes (SOUND 8,15;9,10;10,10) give the first note of a phrase a stronger accent.
  • Each RESTORE points at the DATA line just below it, so phrases play correctly wherever they occur.

This copy comes from a Larken disk, the TTSUC library disk “Music and Sound”. It was converted for tape (the disk command was removed from the save line, and the program now starts at line 390 so that its screen colours are set; the disk copy started at 400) and tested in ZEsarUX.

Related Content

Image Gallery

Source Code

   10 REM Prepared for the TS2068              by Joan Kealy         
  390 BORDER 1: INK 0: PAPER 1: CLS 
  400 PRINT AT 10,7;"P E R F I D I A";AT 14,5;"de ALBERTO DOMINGUEZ"
  405 BEEP .3,7: GO SUB 1000: SOUND 8,15;9,10;10,10: GO SUB 1017: PAUSE 10: GO SUB 1055: BEEP .9,12: GO SUB 1000: GO SUB 1050: BEEP .15,12: BEEP .15,14: BEEP .15,12: BEEP .15,11
  410 GO SUB 1015: BEEP .3,12: BEEP .3,11: SOUND 8,15;9,10;10,10: GO SUB 1055: BEEP 1,9: GO SUB 1000: GO SUB 1050: BEEP .15,11: GO SUB 1035
  420 BEEP .15,12: BEEP .15,14: BEEP .15,12: BEEP .15,11: GO SUB 1015: BEEP .15,12: BEEP .15,11: BEEP .15,9: GO SUB 1055: BEEP .45,12: BEEP .15,9
  425 GO SUB 1050: BEEP .3,7: BEEP .3,5: BEEP .3,7: BEEP .3,9: BEEP .3,5: GO SUB 1025: BEEP 1.5,4: GO SUB 1999: PAUSE 30: GO SUB 1000: GO SUB 1035: BEEP .3,7: SOUND 8,15;9,10;10,10: GO SUB 1017: PAUSE 10: GO SUB 1055: BEEP 1,12: GO SUB 1000: GO SUB 1050: BEEP .15,11
  430 GO SUB 1035: BEEP .15,12: BEEP .15,14: BEEP .15,12: BEEP .15,11: GO SUB 1015: BEEP .3,12: BEEP .3,11: SOUND 8,15;9,10;10,10: GO SUB 1055: BEEP 1,9: GO SUB 1000: GO SUB 1050: BEEP .15,11:
  435 GO SUB 1035: BEEP .15,12: BEEP .15,14: BEEP .15,14: BEEP .15,12: BEEP .15,12: BEEP .15,11: GO SUB 1015: BEEP .3,12: BEEP .3,11: BEEP .3,9: GO SUB 1055: BEEP .45,12: BEEP .15,9
  440 GO SUB 1050: RESTORE 445: FOR b=1 TO 5: READ d,f: BEEP d,f: NEXT b
  445 DATA .3,7,.3,5,.3,7,.3,9,.3,5
  450 GO SUB 1025: BEEP 1,4: GO SUB 1999: PAUSE 30: BEEP .15,2: BEEP .15,4
  455 GO SUB 1000: GO SUB 1050: RESTORE 460: FOR b=1 TO 14: READ d,f: BEEP d,f: NEXT b
  460 DATA .15,5,.15,5,.15,5,.15,7,.15,9,.15,9,.15,9,.15,8,.45,9,.15,8,.15,9,.15,8,.15,9,.15,11
  465 GO SUB 1025: BEEP 1.1,8: GO SUB 1999: PAUSE 40: BEEP .5,11: BEEP .15,12: GO SUB 1000: GO SUB 1050: RESTORE 470: FOR b=1 TO 16: READ d,f: BEEP d,f: NEXT b
  470 DATA .15,14,.15,14,.15,14,.15,12,.15,11,.15,11,.15,11,.15,12,.15,11,.15,11,.15,11,.15,9,.15,7,.15,9,.15,7,.15,5
  475 GO SUB 1025: BEEP 1.1,4: GO SUB 1999: PAUSE 40: GO SUB 1000: GO SUB 1035: BEEP .3,7: SOUND 8,15;9,10;10,10: GO SUB 1017: PAUSE 10: GO SUB 1055: BEEP 1.3,12: GO SUB 1000: GO SUB 1050: BEEP .15,11: GO SUB 1035
  480 BEEP .5,12: BEEP .15,14: BEEP .15,12: BEEP .15,11: GO SUB 1015: BEEP .3,12: BEEP .3,11: SOUND 8,10;9,15;10,10: GO SUB 1055: BEEP 1,9: GO SUB 1000: GO SUB 1050: BEEP .15,11
  485 GO SUB 1035: BEEP .15,12: BEEP .15,14: BEEP .15,12: BEEP .15,11: GO SUB 1015: BEEP .3,12: BEEP .3,11: BEEP .3,9: GO SUB 1055: BEEP .45,12: BEEP .15,9
  490 GO SUB 1050: BEEP .3,7: BEEP .3,5: BEEP .3,7: GO SUB 1035: BEEP .3,9: BEEP .3,14: SOUND 13,13: GO SUB 1017: BEEP 1.3,12
  500 GO SUB 1999: PAUSE 180: CLS : STOP 
 1000 SOUND 7,56;8,15;9,16;10,14;11,255;12,255;13,8: RETURN : REM on
 1015 SOUND 0,209;1,0;2,165;3,0;4,139;5,0: RETURN : REM  C Maj.
 1017 SOUND 0,162;1,1;2,75;3,1;4,23;5,1: RETURN : REM Lower C Maj
 1025 SOUND 0,165;1,0;2,131;3,0;4,110;5,0: RETURN : REM  E Maj.
 1035 SOUND 0,23;1,1;2,221;3,0;4,186;5,0: RETURN  : REM  G Maj.
 1050 SOUND 0,186;1,0;2,156;3,0;4,124;5,0: RETURN : REM  D Minor
 1055 SOUND 0,248;1,0;2,209;3,0;4,165;5,0: RETURN : REM  a Minor
 1999 SOUND 7,63: RETURN : REM off
 9997 STOP 
 9998 CLEAR : SAVE "perfid.B1" LINE 400

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.