ไฟล์ซอร์สเพลงของ Martin Galway จากเกม Commodore 64 ยุคทศวรรษ 1980
(github.com/MartinGalway)- เผยแพร่ ไฟล์ซอร์สเพลงเกม Commodore 64 จากยุคทศวรรษ 1980 ทำให้สามารถตรวจสอบการทำงานภายในของ music player และวิธีการทำงานในยุคนั้นได้โดยตรง
- ไฟล์ซอร์สสามารถนำไปใช้เพื่อ ประกอบกลับ แก้ไข และสร้างเพลงใหม่ ได้ โดยกำหนดให้ระบุเครดิต Martin Galway เมื่อนำไปใช้
- ลิขสิทธิ์ความเป็นเจ้าของ ของเพลงและโค้ดโปรแกรมมิงเหล่านี้ ปัจจุบันเป็นของ Martin Galway ซึ่งในช่วงที่สร้างงานในทศวรรษ 1980 เขายังไม่ได้เป็นเจ้าของ และภายหลังได้สิทธิ์มาจาก Infogrames
- player รุ่นที่ 1 ถูกใช้ใน Wizball และอิงตามการออกแบบที่ใช้ตั้งแต่ปี 1984 ถึงกลางปี 1987 ส่วน player รุ่นที่ 2 เขียนขึ้นสำหรับ Athena และต่อมาถูกใช้ต่อใน Times Of Lore และ Insects In Space
- ทำให้ก้าวข้ามการฟังเพลงเกมคลาสสิกเพียงอย่างเดียวไปสู่การ วิเคราะห์และนำกลับมาใช้ใหม่ ได้ ช่วยให้เข้าใจและต่อยอดเทคนิคการสร้างงานในยุคนั้นโดยตรง
ภาพรวมของโปรเจกต์
- เผยแพร่ ไฟล์ซอร์สเพลงเกม Commodore 64 จากยุคทศวรรษ 1980 ทำให้สามารถอ่านและวิเคราะห์ music player กับวิธีการทำงานในยุคนั้นได้โดยตรง
- ไฟล์ซอร์สสามารถนำไปใช้เพื่อ ประกอบกลับ แก้ไข และสร้างเพลงใหม่ ได้ โดยระบุให้ให้เครดิต Martin Galway ในฐานะผู้สร้างต้นฉบับ
- ปัจจุบัน ลิขสิทธิ์ความเป็นเจ้าของ ของเพลงและโค้ดโปรแกรมมิงนี้เป็นของ Martin Galway ซึ่งในช่วงที่สร้างงานในทศวรรษ 1980 เขายังไม่ได้เป็นเจ้าของ และภายหลังได้สิทธิ์มาจาก Infogrames
การแบ่งตามรุ่นของ player
- player รุ่นที่ 1 ถูกใช้ใน "Wizball" และอิงตามการออกแบบที่ใช้ตั้งแต่ปี 1984 ถึงกลางปี 1987
- player รุ่นที่ 2 ถูกใช้ครั้งแรกใน "Athena" และถูกเขียนขึ้นสำหรับเกมนี้
- หลังจากนั้น player รุ่นที่ 2 ก็ถูกใช้ต่อในเกมอย่าง Times Of Lore, Insects In Space
ทำไมเรื่องนี้สำคัญ
- ทำให้สามารถตรวจสอบ การทำงานภายในของ C64 music player และวิธีการทำงานจริงในยุคนั้นได้จากซอร์สต้นฉบับ
- ไม่ได้หยุดอยู่แค่การรับฟัง แต่ยังสามารถ วิเคราะห์และนำกลับมาใช้ใหม่ ได้ ช่วยให้เข้าใจและต่อยอดเทคนิคการสร้างเพลงเกมคลาสสิกได้โดยตรง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ฟัง ทูนของ Wizball ได้ที่นี่
https://deepsid.chordian.net/?file=/MUSICIANS/G/Galway_Martin/Wizball.sid&subtune=4
เปลี่ยน subtune ได้ด้วยลูกศรขึ้น/ลงเล็ก ๆ
เยี่ยมมาก สมัยก่อนผมชอบทูนของ Short Circuit มาก ถึงขั้นเปิดดูโค้ดด้วย cartridge monitor
เพื่อพยายามดึงมันไปใส่ใน standalone player shell ของตัวเองด้วยซ้ำ อาจจะทำสำเร็จจริง ๆ ก็ได้
ดีใจที่ตอนนี้ได้เห็นจากซอร์สแล้วว่า address กับความหมาย ที่เมื่อ 40 ปีก่อนต้องเดาเอาเองนั้นคืออะไร
อ้อ มันอยู่ใน
Short_circuit.sidของ linked player ด้วย ขอบคุณเจ๋งมาก ความทรงจำที่ได้ทำสิ่งนี้กับพ่อเมื่อราว ๆ 35 ปีก่อน ยังชัดเจนอยู่เลย
จากไฟล์นี้ https://github.com/MartinGalway/C64_music/blob/main/ocean_assembler_directives.txt
DSP น่าจะหมายถึง displacement ใช้คู่กับ ORG
โดย ORG ระบุตำแหน่งหน่วยความจำที่โค้ดจะถูกรัน ส่วน DSP ดูเหมือนจะเลื่อนโค้ดไปวางไว้ถัดไปในหน่วยความจำก่อน
แล้วค่อยย้ายกลับมาที่ address ของ ORG ตอนรันจริง
DFC ดูเหมือนจะเหมือน DFM แต่สร้าง PETSCII แทน ASCII
สุดยอดจริง ๆ ตอนเด็กผมชอบ เพลง C64 ของ Galway มาก โดยเฉพาะ Wizball กับ Parallax ที่เปิดฟังบ่อยมาก
จำได้ลาง ๆ ว่าเคยคิดจะเขียน player เองด้วย assembly เหมือนกัน แต่สุดท้ายก็กลายเป็นอีกโปรเจกต์ที่ทำไม่เสร็จ
มันยอดเยี่ยมจริง ๆ และไม่ได้มีแค่ Galway แต่เพลงยุคนั้นโดยรวมก็เป็นแบบนั้น
ช่วงโควิดมีจังหวะชีวิตแปลก ๆ จนผมต้องติดอยู่คนละประเทศกับภรรยาและลูก 2.5 เดือน
แล้วบังเอิญได้กลับไปอยู่บ้านที่ตัวเองโตมาเพียงลำพัง เลยไปคุ้ย C128 เครื่องเก่าออกมาจากห้องใต้หลังคา
เปิดยูทูบดูวิธีทำความสะอาด จัดการทำความสะอาดไดรฟ์ดิสก์ แล้วหยอดน้ำมันนิดหน่อยก่อนลองเปิดดิสก์เก่า ๆ
Commando ยังโหลดได้อยู่ และผมก็ปล่อยเพลง Rob Hubbard บนหน้าจออินโทรเล่นทิ้งไว้เป็นชั่วโมง ๆ ระหว่างทำอย่างอื่น
ผมไม่ได้ทำเพลง SID หรือ mod-player เอง แต่เพื่อนบ้านเคยทำ Amiga mod player สำหรับ Atari ST
เสียงมันต่างออกไปและกิน CPU พอสมควร แต่เล่น 4 แชนเนลได้จริง
ช่วงหลัง ๆ ผมเอาไฟล์ DOS .ASM เก่า ๆ ไปให้ Sonnet 4.6 ช่วยจนคอมไพล์ได้อีกครั้ง
และหลังจากได้รู้จักเครื่องมืออย่าง UASM สุดท้ายก็ build สำเร็จ
เลยคิดว่าไฟล์ C64 assembly แบบนี้ก็น่าจะทำคล้ายกันได้
ถาม LLM ว่าจะคอมไพล์ยังไงแล้วเล่นในอีมูเลเตอร์อย่างไรน่าจะพอได้
ถ้ามีไกด์สั้น ๆ ว่าควรเริ่มจากตรงไหนก็คงดีมาก
TL;DR ของฝั่ง DOS .ASM เก่าคือประมาณว่า "คอมไพล์ด้วย UASM ฟรี แล้วรันใน DOSBox"
สงสัยว่ามีใครเคยลองย้ายสิ่งนี้ไปเป็น Tidal Cycles หรือ Strudel JS บ้างไหม
คือแปลงมันให้อยู่ในรูปของ pattern performance ที่อิงสัญลักษณ์น่ะ
AI บอกว่าการแปลแบบนี้ยาก แต่ก็พอเป็นไปได้
https://claude.ai/share/65c16d60-5d27-496b-96a7-40959e95ac62
แล้วก็นี่คือเวอร์ชันแปลด้วย AI ของโน้ตบางส่วนที่ Claude อ้างว่าเป็นเมโลดี้หลัก
https://strudel.cc/#Ci8vIFdpemJhbGwgIklucHV0IE5hbWUiIC0gbWFpbiBtZWxvZHkgKGNoYW5uZWwgMCkKLy8gT3JpZ2luYWw6IE1hcnRpbiBHYWx3YXksIDE5ODcuIE5vdGUgaW5kaWNlcyBmcm9tIEM2NCBTSUQgYXNtCi8vIHRyYW5zbGF0ZWQgYXMgTUlESSA9IGluZGV4ICsgMTIuCgpzZXRjcHMoMTQwLzYwLzQpCgokOiBub3RlKGA8CiAgW2E0IH4gfiBhNF0gW2c0IH4gfiBnNF0gW2YjNCB%2BIH4gfl0KICBbfiB%2BIH4gYjRdIFtiNCBiNCBiNCB%2BXSBbYjQgfiBiNCB%2BXQogIFtkNSBkNSBkNSBkNV0gW2Q1IGQ1IGY1IGQ1XSBbYzUgZDUgYzUgZzRdCiAgW2E0IH4gfiBhNF0gW2c0IGc0IH4gfl0gW2YjNCB%2BIGE0IH5dCiAgW2c0IH4gfiB%2BXQo%2BYCkKICAucygic3F1YXJlIikKICAuYXR0YWNrKC4wMDUpLmRlY2F5KC4wOCkuc3VzdGFpbiguNCkucmVsZWFzZSguMSkKICAubHBmKDIyMDApLmxwcSgzKQogIC5nYWluKC42KQoKLy8gQ2hhbm5lbCAxOiB0aGUgaGlnaCBCNSBjaGltZSB0aGF0IHB1bmN0dWF0ZXMgdGhyb3VnaG91dAokOiBub3RlKCJiNSB%2BIH4gfiB%2BIH4gYjUgfiIuZmFzdCgyKSkKICAucygidHJpYW5nbGUiKQogIC5hdHRhY2soLjAwMSkuZGVjYXkoLjA0KS5zdXN0YWluKDApLnJlbGVhc2UoLjA1KQogIC5nYWluKC4zKQoKLy8gQ2hhbm5lbCAyOiBiYXNzIGxpbmUgLSByb290IG1vdGlvbiBEIC0gQSAtIEcgLSBECiQ6IG5vdGUoIjxkMyBhMiBnMiBkMz4iKQogIC5zKCJzYXd0b290aCIpCiAgLmxwZig4MDApLmxwcSgyKQogIC5hdHRhY2soLjAwNSkuZGVjYXkoLjIpLnN1c3RhaW4oLjYpLnJlbGVhc2UoLjEpCiAgLmdhaW4oLjUpCg%3D%3D
แล้วธีมต้นฉบับก็ยอดเยี่ยมมาก ควรค่าแก่การฟังจริง ๆ
https://youtu.be/sFYzjU-C3mA
สุดท้ายก็ต้องลองทำเอง
Claude แอบเหมือนโกงนิด ๆ เพราะมันจำชนิดของไฟล์ได้ ไปดาวน์โหลด psid จากเว็บ
แล้วหา wasm sid player มาสร้างเป็นเว็บไซต์ทับอีกที
https://claude.ai/public/artifacts/df6cdcae-08dc-452b-ba19-ffae2d6546f6
https://claude.ai/share/4dd36c16-bc62-445a-b423-ad4637f06432
GPT-5.5 สร้างสคริปต์ Python จำนวนมากเพื่อดึงข้อมูลเพลงออกมา
แม้ implementation ของ Strudel จะล้มเหลว แต่หลังจากนั้นผมก็ให้มันสร้างเว็บไซต์ต่อ
https://ubiquitous-vacherin-8e7993.netlify.app/
ฝั่งนี้เป็นผลลัพธ์จากการแปลเพลงจากซอร์ส assembler มาเป็น JavaScript
ทั้งสองอันน่าประทับใจทีเดียว เพียงแต่ต้องคอยแก้ซ้ำอีกหน่อย
น่าเสียดาย แต่นั่นฟังดูไม่เหมือนแทร็กของ Wizball หรือ Game Over เลยแม้แต่น้อย
ทูนของ Green Beret กับ Rambo: First Blood Part 2 ยังฟังแล้วน่าทึ่งแม้ในตอนนี้ และ Martin ก็แทบจะเป็นพ่อมดเลย
ต้องยกย่อง Martin Galway มากที่ เผยแพร่ สิ่งนี้ออกมา
อยากให้เรื่องแบบนี้เกิดขึ้นบ่อยกว่านี้ และอยากให้เหล่านักเขียนสามารถเรียกร้องกับสำนักพิมพ์ได้ตอนทำสัญญา
ให้กำหนด ระยะเวลาลิขสิทธิ์ ให้สั้นลง
แน่นอน ผมก็ไม่รู้หรอกว่านักเขียนหนังสือจะยังมีรายได้อีกแค่ไหนในอีก 10, 20, 30 ปี
บางกรณีก็ยังทำเงินก้อนโตได้อย่างมูลนิธิจัดการมรดกของ JRR Tolkien หรือ K.K. Rowling
แต่สำหรับนักเขียนที่มีชื่อเสียงน้อยกว่า กลยุทธ์แบบนั้นอาจจะเหมาะมากทีเดียว
นั่นแหละที่สะท้อน ความวิปริตของกฎหมายลิขสิทธิ์สมัยใหม่ ได้ชัดเจน
ผมฟัง slayradio แบบ ๆ หยุด ๆ มามากกว่า 10 ปีแล้ว
https://slayradio.org
ผมเองก็ฟังและแชตกับคนที่นั่นมาหลายสิบปีแล้ว
ความทรงจำย้อนกลับมาเต็ม ๆ ผมชอบ Galway กับ Hubbard มาก
พวกเขาทำสิ่งที่น่าสนใจอย่างเหลือเชื่อได้ภายใต้ข้อจำกัดขนาดนั้น และตอนนี้กลับไปฟังก็ยังเพราะอยู่
ผมไม่อายุมากพอจะทันยุคคอมพิวเตอร์สมัยนั้นด้วยตัวเอง แต่รู้ว่า Cosmic Bakery นั้นยอดเยี่ยมมาก
ไฟล์ซอร์สพวกนี้ใหญ่เกิน ขนาด RAM ของ C64
เลยคิดว่าเพลงคงไม่ได้ถูกพัฒนาในรูปไฟล์ซอร์สแบบนี้มาตั้งแต่แรก
ผมไม่รู้เรื่อง Ocean เท่าไร แต่หลายบริษัทใช้ Tatung Einstein เป็นแพลตฟอร์มพัฒนา
ซึ่งเครื่องนั้นก็อยู่แถว ๆ 64KiB เหมือนกัน ถึงอย่างนั้นซอฟต์แวร์ที่ใช้ build เครื่องมือพวกนี้
ก็น่าจะรองรับไฟล์ซอร์สขนาดใหญ่กว่าที่ใส่ในหน่วยความจำของเครื่องได้ทั้งหมดในคราวเดียว
ช่วงที่ Wizball ออกมาแล้วก็อาจย้ายไปใช้ Atari ST, เครื่องตระกูล IBM compatible หรือ Amiga กันบ้าง
แต่การทำเพลงในรูป ไฟล์ซอร์ส นั้นเป็นเรื่องปกติมาก
ไม่เชิงแบบนั้น แต่ assembler ยอดนิยมบางตัวบน C64 ใช้ข้อความแบบ tokenized
ทำให้ยัดข้อมูลจำนวนมากลงใน RAM ได้พอสมควร