--- title: "Perfidia" id: 72708 type: "computer_media" slug: "perfidia" url: "http://localhost/computer_media/perfidia/" markdown_url: "http://localhost/computer_media/perfidia.md" published_at: "2026-10-26T23:19:30+00:00" modified_at: "2026-10-26T23:19:30+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/perfidia-1.png" excerpt: "A performance of Alberto Domínguez's bolero Perfidia, with the melody played by BEEP and the chord accompaniment played on the sound chip under a simple title screen." post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Joan Kealy" slug: "joan-kealy" taxonomy: "indiv" url: "http://localhost/indiv/joan-kealy/" genre: - name: "Music" slug: "music" taxonomy: "genre" url: "http://localhost/type/music/" media_type: "Program" programmers: - name: "Joan Kealy" slug: "joan-kealy" taxonomy: "indiv" url: "http://localhost/indiv/joan-kealy/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Perfidia%20%28198x%29%28Kealy%2C%20Joan%29%28TS2068%29%28US%29%28Program%29.zip" tsrun_member: "Perfidia (198x)(Kealy, Joan)(TS2068)(US)(Program)/Perfidia (198x)(Kealy, Joan)(TS2068)(US)(Program).tap" mediadate: "198x" images: - url: "http://localhost/wp-content/uploads/2026/10/perfidia-1.png" related_content: - id: 55969 title: "Espanola" type: "computer_media" url: "http://localhost/computer_media/espanola/" media_type_tags: "Music" license: false --- # Perfidia 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. ## 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 ```