อ่าน 17 นาที
ซินแคลร์ เบสิก
Sinclair BASICเป็นภาษาโปรแกรมBASICที่ใช้ในคอมพิวเตอร์บ้าน8 บิต จากSinclair Research , Timex SinclairและAmstrad ตัวแปลภาษา Sinclair BASIC เขียนโดย Nine Tiles Networks Ltd.
ซินแคลร์ เบสิก
| ซินแคลร์ เบสิก | |
|---|---|
| กระบวนทัศน์ | คำสั่ง |
| ออกแบบโดย | จอห์น แกรนท์, สตีฟ วิคเกอร์ส |
| นักพัฒนา | เครือข่ายไนน์ไทล์, ซินแคลร์ รีเสิร์ช |
| ปรากฏครั้งแรก | 1980 |
| แพลตฟอร์ม | ZX80 , ZX81 , ZX Spectrum, +, 128, +2, +3 , T/S 2068 , TC 3256 |
| ใบอนุญาต | กรรมสิทธิ์ |
Sinclair BASICเป็นภาษาโปรแกรมBASICที่ใช้ในคอมพิวเตอร์บ้าน8 บิต จากSinclair Research , Timex SinclairและAmstrad ตัวแปลภาษา Sinclair BASIC เขียนโดย Nine Tiles Networks Ltd. [ 1 ]
ระบบนี้ได้รับการออกแบบให้ทำงานโดยใช้ RAMเพียง 1 KB เท่านั้นและมีการตัดสินใจหลายอย่างเพื่อลดการใช้หน่วยความจำ ซึ่งนำไปสู่คุณสมบัติที่โดดเด่นที่สุดอย่างหนึ่งของ Sinclair BASIC นั่นคือ การป้อนคำหลักโดยใช้การกดแป้นพิมพ์เพียงครั้งเดียว โดยแต่ละคำหลักที่เป็นไปได้จะถูกกำหนดให้กับปุ่มบนแป้นพิมพ์ เมื่อกดปุ่มนั้น โทเค็นจะถูกเก็บไว้ในหน่วยความจำ ในขณะที่คำหลักทั้งหมดจะถูกพิมพ์ออกมาบนหน้าจอ วิธีนี้ทำให้การป้อนโค้ดง่ายขึ้น ในขณะเดียวกันก็ลดความซับซ้อนของตัวแยกวิเคราะห์ด้วย
เวอร์ชัน ZX80ดั้งเดิมรองรับเฉพาะ การคำนวณเลข จำนวนเต็มซึ่งช่วยชดเชยข้อจำกัดด้านการออกแบบเพื่อประหยัดหน่วยความจำที่ส่งผลเสียต่อประสิทธิภาพการทำงาน เมื่อระบบถูกพอร์ตไปยังZX81ในปี 1981 ก็ได้เพิ่มการคำนวณเลขทศนิยมแบบเต็มรูปแบบเข้าไปเวอร์ชันนี้ทำงานช้ามาก จัดอยู่ในกลุ่ม BASIC ที่ช้าที่สุดในตลาดในขณะนั้น แต่เนื่องจากข้อจำกัดของเครื่อง ทำให้เรื่องนี้ไม่ใช่ปัญหาใหญ่ ความเร็วที่ต่ำไม่ได้เกิดจากตัวแปลภาษาที่ไม่ประสิทธิภาพเป็นหลัก แต่เป็นผลมาจากข้อเท็จจริงที่ว่า 70-80% ของรอบการทำงานของเครื่องถูกใช้ไปกับฮาร์ดแวร์วิดีโอ ดังนั้น Z80 ใน ZX81 ที่ทำงานที่ความเร็ว 3.25 MHz จึง "ในทางปฏิบัติ" ทำงานที่ความเร็วต่ำกว่า 1 MHz จากมุมมองของระบบ BASIC
ประสิทธิภาพการทำงานกลายเป็นปัญหาที่ร้ายแรงมากขึ้นเมื่อมีการวางจำหน่ายZX Spectrumในปี 1982 ซึ่งทำงานช้าเกินไปจนไม่สามารถใช้ประโยชน์จากคุณสมบัติใหม่ ๆ ของเครื่องได้อย่างเต็มที่ นี่จึงนำไปสู่การพัฒนาภาษา BASIC ใหม่ทั้งหมดสำหรับSinclair QL รุ่นต่อมา รวมถึงภาษา BASIC จากผู้พัฒนาภายนอกอีกหลายเวอร์ชันสำหรับ Spectrum และเครื่องเลียนแบบต่าง ๆ เวอร์ชันดั้งเดิมยังคงได้รับการดัดแปลงและพอร์ตต่อไปในยุคหลัง Sinclair
ประวัติศาสตร์
Clive Sinclairได้พบกับ John Grant เจ้าของ Nine Tiles ในเดือนเมษายน พ.ศ. 2522 เพื่อหารือเกี่ยวกับภาษา BASIC สำหรับแนวคิดคอมพิวเตอร์ใหม่ของ Sinclair [ 2 ] Sinclair ได้แรงบันดาลใจในการสร้างเครื่องใหม่หลังจากเห็นลูกชายของเขาเพลิดเพลินกับTRS-80แต่ราคา 500 ปอนด์ของเครื่องนั้นดูเหมือนจะเป็นข้อจำกัดที่สำคัญต่อความนิยม เขาต้องการชุดอุปกรณ์ใหม่ที่จะต่อยอดจากMK14 รุ่นก่อนหน้า และมีภาษา BASIC ในตัวในราคาเป้าหมาย 79.95 ปอนด์ เพื่อให้ได้ราคานี้ เครื่องจะมาพร้อมกับ RAM เพียง 1 KB และ ROM 4 KB Grant แนะนำให้ใช้ ภาษา Forthแทน แต่เนื่องจากงบประมาณจำกัด Grant จึงเขียนตัวแปลภาษา BASIC ระหว่างเดือนมิถุนายนถึงกรกฎาคม พ.ศ. 2522 แต่โค้ดเริ่มต้นมีขนาด 5 KB และเขาใช้เวลาอีกหนึ่งเดือนในการลดขนาดลง ในตอนแรกเป็นการนำ มาตรฐาน ANSI Minimal BASIC ของ สถาบันมาตรฐานแห่งชาติอเมริกัน ปี 1978 มาใช้แบบไม่สมบูรณ์ โดยใช้เฉพาะการคำนวณเลขจำนวนเต็มเท่านั้น ซึ่งเรียกว่า4K BASIC [ 3 ]
แม้ก่อนที่ ZX80 จะเปิดตัวในเดือนกุมภาพันธ์ พ.ศ. 2523 แรงกดดันด้านราคาที่ลดลงอย่างต่อเนื่องในอุตสาหกรรมทำให้การออกแบบที่ราคาไม่แพงอยู่แล้วสามารถลดความซับซ้อนและต้นทุนลงได้อีก โดยเฉพาะอย่างยิ่ง วงจรแยกส่วนหลายวงใน ZX80 ได้ถูกนำมาใช้ใหม่ในอาร์เรย์ลอจิกที่ไม่ผูกมัด เพียงตัวเดียว จากFerrantiซึ่งทำให้ราคาลดลงเหลือเพียง 49.95 ปอนด์ ในขณะที่เพิ่มขนาดของ ROM เป็น 8 KB งานนี้มอบหมายให้Steve Vickersซึ่งเข้าร่วม Nine Tiles ในเดือนมกราคม พ.ศ. 2523 ในขณะที่ Grant ทำงานเกี่ยวกับโค้ดที่เชื่อมต่อกับฮาร์ดแวร์ Vickers ใช้พื้นที่ที่ใหญ่กว่าเพื่อแนะนำการคำนวณเลขทศนิยมและชุด ฟังก์ชัน ตรีโกณมิติซึ่งเป็นสิ่งที่คาดหวังได้จาก BASIC ในยุคนั้น ทำให้เกิด8K BASICขึ้น[ 4 ]เวอร์ชันเริ่มต้นไม่รองรับZX Printerและมีข้อบกพร่องใน ฟังก์ชัน รากที่สอง Nine Tiles ได้จัดทำเวอร์ชันใหม่เพื่อแก้ไขปัญหาเหล่านี้ แต่ Sinclair ดำเนินการช้าในการรวมเวอร์ชันใหม่ลงใน ROM ในที่สุด ROM ใหม่ก็ถูกนำเสนอให้กับเจ้าของ ZX80 รุ่นก่อนหน้าด้วยเช่นกัน[ 5 ]
เมื่อซินแคลร์แพ้การประกวดสร้างคอมพิวเตอร์ BBCเขาจึงเดินหน้าแผนการผลิตเครื่องคอมพิวเตอร์ราคาประหยัดที่สามารถแสดงผลสีได้ ซึ่งต่อมาได้กลายเป็นZX Spectrumในเดือนเมษายน ปี 1982 พื้นที่ ROM ได้ถูกเพิ่มขึ้นอีกครั้ง คราวนี้เป็น 16 KB ด้วยปรัชญาของเขาในการสร้างระบบโดยใช้ต้นทุนให้น้อยที่สุด ซินแคลร์ต้องการให้มีการเปลี่ยนแปลงน้อยที่สุดเท่าที่จะเป็นไปได้กับ 8K BASIC ที่มีอยู่ แม้ว่า Nine Tiles จะรู้สึกว่าจำเป็นต้องมีสิ่งที่ดีกว่านี้สำหรับเครื่องใหม่ แต่ตารางเวลาไม่อำนวย และจึงมีการขยายโค้ดเดิมอีกครั้ง เนื่องจาก RAM ก็เพิ่มขึ้นเป็น 48 KB เวอร์ชันนี้จึงเป็นที่รู้จักในชื่อ 48K BASIC และในที่สุดก็เป็น48 BASICเมื่อมีการเปิดตัว ZX Spectrum 128 ซึ่งในเวลานั้น Spectrum ขนาด 16 KB ก็เลิกจำหน่าย และเครื่องที่มีอยู่ส่วนใหญ่ได้รับการอัปเกรดเป็น 48 KB แล้ว[ 6 ] [ 7 ]เวอร์ชันใหม่มีวางจำหน่ายในช่วงปลายปี 1981 แต่ทำงาน "ช้าจนน่าหดหู่" และ "เหมือนหอยทาก" นอกจากนี้ เนื่องจากไม่มีต้นแบบให้ใช้งานจนถึงสิ้นปี จึงขาดการสนับสนุนสำหรับอุปกรณ์ต่อพ่วงรุ่นใหม่ที่ซินแคลร์กำลังวางแผน[ 8 ]
ในเดือนกุมภาพันธ์ พ.ศ. 2525 Nine Tiles เริ่มมีข้อขัดแย้งกับ Sinclair เกี่ยวกับค่าลิขสิทธิ์ที่ค้างชำระสำหรับคู่มือต่างๆ ที่ Nine Tiles ผลิตขึ้น ในช่วงเวลาเดียวกัน Vickers และ Richard Altwasser คู่หูของเขาจาก Sinclair ได้ออกจากบริษัทของตนเพื่อเริ่มต้นโครงการJupiter Ace [ 9 ]เมื่อ Spectrum เปิดตัว ROM ยังไม่สมบูรณ์ และแม้ว่า Nine Tiles จะยังคงทำงานต่อไปจนถึงเดือนเมษายน พ.ศ. 2525 แต่ ณ จุดนั้น Spectrum ได้ถูกขายไปแล้ว 75,000 เครื่อง และโครงการก็ถูกยกเลิก ฟังก์ชันที่ขาดหายไปได้รับการเพิ่มเข้ามาในภายหลังด้วยโค้ดเพิ่มเติมในZX Interface 1หลังจากที่ Nine Tiles และ Sinclair แยกทางกัน ก็มีการสร้าง 48 BASIC เวอร์ชันใหม่หลายเวอร์ชัน
ในปี พ.ศ. 2526 ในระหว่างการแนะนำ Spectrum สู่ตลาดสหรัฐอเมริกาในชื่อ TS2068 Timexได้ดัดแปลงเป็นT/S 2000 BASICเวอร์ชันใหม่นี้ไม่สามารถใช้งานโปรแกรม Spectrum ได้หลายโปรแกรมเนื่องจากตำแหน่งหน่วยความจำของฟังก์ชันเครื่องมีการเปลี่ยนแปลง เวอร์ชันที่คล้ายกันแต่เข้ากันได้ดีกว่าเล็กน้อยได้รับการแนะนำใน Spectrum 128 ของสเปนในปี พ.ศ. 2528 ซึ่งก็คือ128 BASIC [ 7 ]
Amstrad ซื้อกิจการ Sinclair Research ในปี 1986 เนื่องจาก Sinclair ไม่เคยเป็นเจ้าของลิขสิทธิ์ภาษา Amstrad จึงต้องจัดหาใบอนุญาตใหม่กับ Nine Tiles นอกจากนี้ยังมีเวอร์ชันอื่นๆ อีกหลายเวอร์ชันปรากฏขึ้นในช่วงเวลานี้ เนื่องจากมีการแนะนำส่วนขยายและโคลน ต่างๆ ของ Spectrum ซึ่งรวมถึง+3 BASIC , BASIC64และTimex Extended Basic [ 7 ] [ 6 ]
ณ ปี 2015 มีตัวแปลภาษาสำหรับระบบปฏิบัติการสมัยใหม่[ 10 ]และระบบเก่า[ 11 ]ที่ช่วยให้สามารถใช้ Sinclair Basic ได้อย่างง่ายดาย
คำอธิบาย
การแก้ไขโปรแกรม
เช่นเดียวกับภาษา BASIC สำหรับคอมพิวเตอร์ส่วนบุคคลส่วนใหญ่ ภาษา BASIC ของ Sinclair มีแกนหลักอยู่ที่ตัวแก้ไขบรรทัดเมื่อเครื่องเริ่มทำงาน มันจะรัน BASIC และแสดงตัวอักษร "K" กลับด้านที่ด้านล่างของหน้าจอเพื่อระบุจุดเริ่มต้น เมื่อป้อนบรรทัดและNEW LINEกดปุ่ม มันจะรันทันทีหากไม่มีหมายเลขบรรทัดนำหน้า หรือจะล้างหน้าจอและดำเนินการเทียบเท่ากับLISTคำสั่ง โดยวางเคอร์เซอร์ ">" ไว้หลังหมายเลขบรรทัดในบรรทัดที่ป้อนล่าสุด
แตกต่างจากเครื่องคอมพิวเตอร์ส่วนใหญ่ในยุคนั้น โปรแกรมแก้ไขโค้ดนี้ไม่อนุญาตให้แก้ไขแบบอิสระ ณ จุดใดจุดหนึ่งบนหน้าจอ แต่เมื่อผู้ใช้กดปุ่ม Ctrl+C บรรทัดโค้ดปัจจุบันจะถูกคัดลอกกลับไปที่ด้านล่างของหน้าจอ ผู้ใช้สามารถเลื่อนไปมาในแนวนอนบนบรรทัดนั้นโดยใช้ปุ่มลูกศรและยืนยันการเปลี่ยนแปลงโดยการกดปุ่ม Ctrl+ C อีกครั้ง ในทางตรงกันข้าม บนเครื่องคอมพิวเตอร์อย่างCommodore 64หรือAtari 8 บิตปุ่มลูกศรขึ้นและลงสามารถใช้เพื่อเลื่อนไปมาระหว่างบรรทัดในโปรแกรมและแก้ไขได้โดยตรง EDITNEW LINE
คุณสมบัติที่โดดเด่นที่สุดของโปรแกรมแก้ไขข้อความนี้คือ การป้อนคำหลักโดยใช้การกดปุ่มเพียงครั้งเดียว ตัวอย่างเช่น บน ZX81 การกดปุ่มบนแป้นพิมพ์จะทำให้คำหลักทั้งหมดถูกป้อนลงในบรรทัดที่กำลังแก้ไขอยู่ เมื่อป้อนคำหลักแล้ว เคอร์เซอร์จะเปลี่ยนเป็น "L" เพื่อระบุว่าสิ่งที่ตามมาจะถูกตีความว่าเป็นข้อความปกติ ตัวอย่างเช่น การกดอีกครั้งในตอนนี้จะป้อนตัวอักษร "P" เพียงตัวเดียว PPRINTP
โดยทั่วไปแล้ว ปุ่มต่างๆ จะมีคำหลักสองคำแยกกัน – คำหนึ่งอยู่ด้านบน และอีกคำหนึ่งอยู่ด้านล่าง การกดปุ่มในโหมด "K" จะเป็นการป้อนคำหลักที่อยู่เหนือปุ่ม เช่น ` PRINTfor` หากระบบอยู่ในโหมด "L" ก็สามารถกลับไปที่ "K" ได้โดยการกดปุ่ม Shift – ในตอนแรก ระบบไม่ได้รองรับ ข้อความ ตัวพิมพ์เล็กดังนั้นจึงไม่จำเป็นต้องกด Shift คำหลักที่อยู่ด้านล่างปุ่มต้องกดปุ่มอีกครั้ง คือ ` + ` ซึ่งจะเปลี่ยนตัวแก้ไขเป็น "โหมดฟังก์ชัน" และเปลี่ยนเคอร์เซอร์เป็น "F" การป้อนโค้ดทั่วไปมักต้องกดปุ่มจำนวนมาก P⇧ ShiftNEW LINE
ระบบนี้มีข้อดีคือสามารถแทนคำหลักที่มีหลายตัวอักษรทั้งหมดด้วยตัวอักษรเดียวในหน่วยความจำ ซึ่งช่วยประหยัดหน่วยความจำได้อย่างมากในเครื่องรุ่นแรกๆ ที่มี RAM เพียง 1 KB การแทนด้วยตัวอักษรเดียวนี้รวมถึงคำที่มีหลายตัวอักษร เช่น<p><> , <span ...
เมื่อระบบมีการพัฒนาและเพิ่มคำหลักใหม่ ระบบการป้อนข้อมูลก็ใช้งานยากขึ้นเรื่อยๆ 48 BASIC ใน Spectrum กำหนดให้แต่ละปุ่มรองรับคำหลักได้มากถึงสี่คำ การป้อนคำหลักเป็นกระบวนการที่ใช้เวลานานในการมองหาปุ่มที่เหมาะสมบนแป้นพิมพ์ที่มีขนาดตัวอักษรค่อนข้างเล็ก จากนั้นจึงป้อนการกดแป้นพิมพ์หลายครั้งที่จำเป็นเพื่อให้ป้อนได้อย่างถูกต้อง ตัวอย่างเช่น การป้อนBEEPต้องพิมพ์+ เพื่อเข้าสู่โหมดขยาย (รุ่นต่อมามีปุ่มแยกต่างหาก) กดค้างไว้ แล้วจึงกดเพื่อปรับปรุงการป้อนข้อมูลที่ซับซ้อนบน Spectrum คำหลักจึงถูกกำหนดสีเพื่อระบุโหมดที่ต้องการ: [ 12 ]CAPS SHIFTSYMBOL SHIFTEXTENDED MODESYMBOL SHIFTZ
- สีขาว : เฉพาะกุญแจ
- สีแดงบนตัวกุญแจ: บวกกับตัวกุญแจSYMBOL SHIFT
- สีเขียวเหนือคำอธิบาย: ตามด้วยคำอธิบายEXTENDED MODE
- สีแดงใต้สัญลักษณ์: ตามด้วยเครื่องหมายบวกที่สัญลักษณ์EXTENDED MODESYMBOL SHIFT
แนวคิดนี้หมดความนิยมลงแล้ว และในเครื่องคอมพิวเตอร์รุ่นต่อมาที่ใช้ภาษา BASIC 128 (เช่น ZX Spectrum 128, +2, +3, +2A และ +2B) จึงมีโปรแกรมแก้ไขข้อความแบบดั้งเดิมมากกว่า โดยผู้ใช้จะพิมพ์คำหลักทีละตัว เหมือนกับคอมพิวเตอร์บ้านอื่นๆ ในยุคนั้น ซึ่งจำเป็นต้องมีตัวแยกคำใหม่เพื่อแปลงบรรทัดให้อยู่ในรูปแบบภายในที่คล้ายกัน
การจัดเก็บข้อมูลในหน่วยความจำของโปรแกรมนั้นคล้ายคลึงกับMicrosoft BASIC ตรง ที่เฉพาะคำหลักเท่านั้นที่แสดงเป็นโทเค็น ในขณะที่คำที่ไม่ใช่คำหลัก เช่น ค่าคงที่ที่เป็นสตริงและตัวเลข และชื่อตัวแปร จะยังคงอยู่ในรูปแบบเดิมที่พิมพ์ไว้ อย่างไรก็ตาม รูปแบบที่พิมพ์นั้นไม่ใช่ASCIIแต่เป็นรหัสอักขระภายในที่ประกอบด้วยทั้งอักขระที่พิมพ์ได้และโทเค็นคำหลัก แม้ว่าบางส่วนของตาราง เช่น ตัวอักษรพิมพ์ใหญ่ A ถึง Z จะอยู่ในลำดับเดียวกับใน ASCII แต่ค่าตัวเลขของอักขระเหล่านั้นแตกต่างกัน กล่าวคือ ค่า ออฟเซ็ตของ รหัสจุดจากศูนย์จะแตกต่างจากค่าออฟเซ็ต 65 ของ ASCII อักขระอื่นๆ เช่น เครื่องหมายวรรคตอน อาจมีการย้ายตำแหน่งมากกว่านั้นชุดอักขระ ZX Spectrumเป็นตัวอย่างที่โดดเด่นที่สุดของรหัสอักขระดังกล่าว คอมพิวเตอร์ที่เกี่ยวข้องที่ใช้ Sinclair BASIC ใช้รูปแบบที่คล้ายกัน เช่นชุดอักขระZX80หรือ ZX81 ชุด อักขระที่แตกต่างกันแต่เกี่ยวข้องเหล่านี้ทั้งหมดรวมถึงโทเค็นของ Sinclair BASIC ด้วย
ประเภทข้อมูล
คุณลักษณะที่แปลกไปจากภาษาอื่น ๆ ของ Sinclair BASIC คือวิธีการจัดเก็บตัวแปรในหน่วยความจำ โดยทั่วไปแล้ว ตัวแปลภาษาจะใช้ช่องเก็บข้อมูลขนาดคงที่เพื่อเก็บข้อมูล ทำให้ง่ายต่อการสแกนตารางตัวแปร แต่เนื่องจากหน่วยความจำของซีรี่ส์ ZX มีจำกัดมาก จึงต้องหลีกเลี่ยงการใช้พื้นที่โดยเปล่าประโยชน์ และนี่นำไปสู่การใช้รูปแบบความยาวแปรผัน ประเภทข้อมูลประกอบด้วยตัวเลขที่จัดเก็บในค่า 5 ไบต์ สตริงที่มีความยาวและตามด้วยอักขระ และอาร์เรย์ของทั้งสองประเภท ข้อมูลถูกจัดเก็บไว้ในตารางเอง ซึ่งแตกต่างจากภาษา BASIC ส่วนใหญ่ในยุคนั้น ที่สตริงและรายการในอาร์เรย์จะถูกจัดเก็บไว้ในฮีป แยก ต่างหาก
ไบต์แรกของค่าตัวแปรจะเก็บชนิดข้อมูลไว้ในสามบิตแรก และอักขระตัวแรกของชื่อตัวแปรไว้ในห้าบิตถัดไป เช่นเดียวกับในภาษาไมโครคอมพิวเตอร์ส่วนใหญ่ ตัวแปรประเภท A, A$, A()และA$()ล้วนเป็นตัวแปรที่แตกต่างกันและสามารถเก็บค่าที่แตกต่างกันได้ ตัวแปรส่วนใหญ่จะมีชื่อได้เพียงอักขระเดียว ยกเว้นตัวแปรตัวเลข (ไม่ใช่อาร์เรย์) ซึ่งจะมีรูปแบบอื่น โดยเก็บอักขระตัวแรกของชื่อไว้ในห้าบิตเดียวกัน แต่ตามด้วยอักขระเพิ่มเติมที่ลงท้ายด้วยตัวเลขที่มีบิตสูงสุดเป็นค่าคงที่ ชื่อตัวแปรที่ยาวจะไม่ขึ้นอยู่กับช่องว่าง และไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็กในเวอร์ชันต่อมา ดังนั้นจึงเหมือนกับการอ้างถึงตัวแปรเดียวกัน LETNumberOfApples=5LETnumberofapples=5
ข้อเสียของวิธีการนี้คือ การสแกนตารางเพื่อค้นหาค่าของตัวแปรอ้างอิงนั้นซับซ้อนกว่า นอกจากการทดสอบว่าชื่อตรงกันโดยใช้ส่วนย่อยของไบต์แรกหรือไม่ หากรายการไม่ใช่รายการที่ต้องการค้นหา จะต้องอ่านชนิดข้อมูลจากสามบิตบนสุด แล้วคำนวณตำแหน่งถัดไปของตัวแปรในหน่วยความจำโดยใช้ชนิดข้อมูลนั้น ตัวอย่างเช่น หากโปรแกรมพบตัวแปร "A" และตารางเริ่มต้นด้วยรายการสำหรับ "B$" หากการจับคู่ A กับ B ไม่ตรงกัน โปรแกรมจะอ่านชนิดข้อมูลเพื่อดูว่าเป็นสตริงหรือไม่ จากนั้นต้องอ่านไบต์ที่มีความยาวถัดไปและข้ามไปข้างหน้าตามจำนวนไบต์นั้นเพื่อค้นหารายการถัดไปในตาราง เพื่อให้ง่ายขึ้นเล็กน้อย อาร์เรย์จึงจัดเก็บความยาวสองไบต์ ทำให้สามารถข้ามโครงสร้างทั้งหมดได้ง่ายขึ้น
คุณลักษณะเฉพาะอย่างหนึ่งคือ "ชนิดข้อมูล float แบบสั้น" หรือชนิดข้อมูลจำนวนเต็ม ตัวแปรตัวเลขใดๆ ก็สามารถจัดเก็บได้ทั้งสองชนิด การจัดเก็บไม่เปลี่ยนแปลงและใช้พื้นที่ 5 ไบต์ในทั้งสองกรณี จำนวนเต็มจะระบุโดยการตั้งค่าไบต์เลขชี้กำลังเป็นศูนย์ ในขณะที่ค่าทศนิยมจะถูกจัดเก็บด้วย เลขชี้กำลังในรูปแบบ excess-128ซึ่งหมายความว่าไม่สามารถจัดเก็บศูนย์เป็น float ได้และสูญเสียค่าเลขชี้กำลังที่เป็นไปได้ไปหนึ่งค่า นอกจากนี้ยังไม่ได้ใช้หน่วยความจำน้อยลง เนื่องจากค่าต่างๆ ยังคงใช้พื้นที่ 5 ไบต์ในหน่วยความจำ ข้อดีของรูปแบบนี้คือประสิทธิภาพ ไลบรารีทางคณิตศาสตร์มีการทดสอบเพื่อตรวจหาเลขชี้กำลังที่เป็นศูนย์ และหากพบ มันจะไม่พยายามดำเนินการต่างๆ กับ 3 ไบต์ที่เหลือภายใต้เงื่อนไขบางประการ
รายละเอียดคำสำคัญ
ภาษา BASIC เวอร์ชัน ZX81 8Kใช้รูปแบบที่สั้นกว่าGOTOคือ , GOSUB, CONTและRANDในขณะที่ภาษา BASIC เวอร์ชัน Spectrum 48ใช้รูปแบบที่ยาวกว่าGO TOคือ , GO SUB, CONTINUEและ ภาษา BASIC เวอร์ชัน RANDOMIZEZX80 4Kก็ใช้รูปแบบที่ยาวกว่าเหล่านี้เช่นกัน แต่แตกต่างกันตรงที่ใช้การสะกดแบบ ภาษา BASIC เวอร์ชัน RANDOMISEZX81 8Kเป็นเวอร์ชันเดียวที่ใช้FAST, SCROLL, SLOWและ ภาษา BASIC เวอร์ชัน UNPLOTZX80 4Kมีฟังก์ชันพิเศษTL$()ซึ่งเทียบเท่ากับตัวดำเนินการสตริง(2 TO )ในเวอร์ชันต่อมา
ชุดอักขระ ZX80 , ZX81และZX Spectrumจะกำหนดรหัสอักขระเฉพาะสำหรับแต่ละคำหลักหรือตัวดำเนินการหลายอักขระ เช่น<=, , >=, <>( ""แยกเป็นโทเค็นเฉพาะใน ZX81 เท่านั้น), **(แทนที่ด้วย↑ใน Spectrum) รหัสเหล่านี้จะถูกขยายโดยการอ้างอิงตารางโทเค็นใน ROM ดังนั้น คำหลักจึงใช้หน่วยความจำเพียงหนึ่งไบต์ ซึ่งประหยัดกว่าการจัดเก็บแบบตัวอักษรต่อตัวอักษรแบบดั้งเดิมอย่างมาก นอกจากนี้ยังหมายความว่าตัวแปลภาษา BASICสามารถกำหนดคำสั่งหรือฟังก์ชันใด ๆ ได้อย่างรวดเร็วโดยการประเมินเพียงหนึ่งไบต์ และคำหลักไม่จำเป็นต้องเป็นคำสงวนเหมือนในภาษา BASIC อื่น ๆ หรือภาษาโปรแกรมอื่น ๆ เช่น อนุญาตให้กำหนดตัวแปรชื่อPRINTและแสดงค่าด้วยPRINT PRINTสิ่งนี้เกี่ยวข้องกับข้อกำหนดทางไวยากรณ์ที่ทุกบรรทัดต้องเริ่มต้นด้วยคำหลักคำสั่ง และการกดปุ่มเพียงครั้งเดียวสำหรับคำสั่งนั้นที่ต้นบรรทัดจะเปลี่ยนตัวแก้ไขจากโหมดคำสั่งเป็นโหมดตัวอักษร ดังนั้น การกำหนดค่าตัวแปรจึงต้องใช้LET(เช่นไม่ใช่แค่) วิธีการนี้ก็แตกต่างจากภาษา BASIC อื่น ๆ เช่นกัน นอกจากนี้ ยังหมายความว่า ต่างจากภาษา BASIC อื่นๆ ตัวแปลภาษาไม่จำเป็นต้องใช้วงเล็บเพื่อระบุฟังก์ชันเพียงพอแล้ว ไม่จำเป็นต้องใช้ (แม้ว่าจะอนุญาตให้ใช้วงเล็บได้ก็ตาม) ROM BASIC 4K ของ ZX80 มีข้อยกเว้นสั้นๆ ดังนี้ ฟังก์ชัน, , , , , , และไม่มีโทเค็นหนึ่งไบต์ แต่พิมพ์ทีละตัวอักษรและต้องใช้วงเล็บ ฟังก์ชันเหล่านี้แสดงเป็นฟังก์ชันอินทิกรัลบนป้ายกำกับด้านบนและด้านขวาของแป้นพิมพ์[ 13 ]LETA=1A=1SIN xSIN(x)CHR$()STR$()TL$()PEEK()CODE()RND()USR()ABS()
ภาษา BASIC 128ซึ่งมีอยู่ใน ZX Spectrum 128, +2, +3, +2A และ +2B จัดเก็บคำหลักภายในในรูปแบบรหัสไบต์เดียว แต่ใช้ระบบป้อนข้อมูลแบบตัวอักษรต่อตัวอักษรตามแบบฉบับของ BASIC นอกจากนี้ยังได้แนะนำคำสั่งใหม่สองคำสั่ง:
PLAYซึ่งใช้ชิปเสียงGeneral Instrument AY-3-8910 ในรุ่น 128kSPECTRUMซึ่งเปลี่ยน Spectrum 128k ไปเป็นโหมดความเข้ากันได้ของ Spectrum 48k
ZX Spectrum 128 เวอร์ชันภาษาสเปนดั้งเดิมมีคำสั่งแก้ไข BASIC เพิ่มเติมอีกสี่คำสั่งในภาษาสเปน[ 14 ] [ 15 ]ซึ่งหนึ่งในนั้นไม่ได้มีการบันทึกไว้
EDITAR(เพื่อแก้ไขหมายเลขบรรทัดหรือเรียกใช้ตัวแก้ไขข้อความแบบเต็มหน้าจอ)NUMERO(เพื่อเรียงลำดับหมายเลขบรรทัดโปรแกรมใหม่)BORRAR(เพื่อลบบรรทัดโปรแกรม)ANCHO(เพื่อตั้งค่าความกว้างของคอลัมน์ของ อุปกรณ์ RS-232แต่ไม่มีการบันทึกไว้เนื่องจากโค้ดมีข้อผิดพลาด)
Unlike the LEFT$(), MID$() and RIGHT$() functions used in the ubiquitous Microsoft BASIC dialects for home computers, parts of strings in Sinclair BASIC are accessed by numeric range. For example, A$(5 TO 10) gives a substring starting with the 5th and ending with the 10th character of the variable a$. Thus, it is possible to replace the LEFT$() and RIGHT$() commands by simply omitting the left or right array position respectively; for example a$( TO 5) is equivalent to LEFT$(A$,5). Further, a$(5) alone is enough to replace MID$(A$,5,1).
Syntax
Keywords
On the 16K/48K ZX Spectrum (48 BASIC), there are 88 keywords in Sinclair BASIC, denoting commands (of which there are 50), functions and logical operators (31), and other keywords (16, including 9 which are also commands or functions):
| Keyword | Parameters[note 1] | Entered using[note 2] | Type | Summary |
|---|---|---|---|---|
ABS | number | EXTENDED MODE then G | Function | Returns the absolute value of number[16] |
ACS | number | EXTENDED MODE then SYMBOL SHIFT+W | Function | Returns the arccosine of number[17] |
AND | SYMBOL SHIFT+Y | Logical operator | Returns true if both conditions on either side of the AND keyword are true, else returns false[note 3][18] | |
ASN | number | EXTENDED MODE then SYMBOL SHIFT+Q | Function | Returns the arcsine of number[19] |
AT | line, column; | SYMBOL SHIFT+I | Other | Used in a PRINT statement to print at the line and column specified;[20] for example, PRINT AT 5,10;"*" puts a star in column 10 of line 5. |
ATN | number | EXTENDED MODE then SYMBOL SHIFT+E | Function | Returns the arctangent of number[17] |
ATTR | (line, column) | EXTENDED MODE then SYMBOL SHIFT+L | Function | Returns a byte containing information on the colours of the text cell on the screen, corresponding to the specified line and column; note that, unlike most Sinclair BASIC keywords, the parentheses are required; the first three bits indicate the ink (foreground) colour, the fourth, fifth and sixth bits the paper (background) colour, the seventh bit whether the colours are bright or not, and the eight, whether they are flashing[21] |
BEEP | duration, pitch | EXTENDED MODE then SYMBOL SHIFT+Z | Command | Produces sound from the computer's speaker; duration is in seconds, pitch is in semitones above (positive value) or below (negative value) middle C[22] |
BIN | number | EXTENDED MODE then B | Other | Indicates number is in binary notation[23] |
BORDER | number | B | Command | Sets the border of the screen to the colour specified by the number[note 4][24] |
BRIGHT | number | EXTENDED MODE then SYMBOL SHIFT+B | Command/other | ทำให้สีที่ตามมาทั้งหมดสว่างขึ้นหากnumberเป็น 1 หรือเป็นเฉดสีปกติหากเป็น 0 [หมายเหตุ 5 ] [ 25 ] |
CAT | number | EXTENDED MODEจากนั้น+SYMBOL SHIFT9 | สั่งการ | แสดงเนื้อหาของZX Microdriveที่ระบุโดยnumber[หมายเหตุ 6 ] [ 26 ] |
CHR$ | number | EXTENDED MODEแล้วU | การทำงาน | ส่งคืนอักขระที่สอดคล้องกับเลขฐานสิบ ใน ชุดอักขระnumberของคอมพิวเตอร์[ 27 ] |
CIRCLE | x, y, r | EXTENDED MODEจากนั้น+SYMBOL SHIFTH | สั่งการ | วาดวงกลมที่มีจุดศูนย์กลางอยู่ที่พิกัด ( x, y) และรัศมีr[ 28 ] |
CLEAR | address | X | สั่งการ | ล้างหน้าจอ[ 29 ]ตัวแปรทั้งหมดและGO SUBสแต็ก[ 30 ]และตั้งค่าที่อยู่ RAM สูงสุดที่จะใช้โดย BASIC ได้ตามต้องการ[ 31 ] |
CLOSE # | number | EXTENDED MODEจากนั้น+SYMBOL SHIFT5 | สั่งการ | ปิดหมายเลขสตรีมที่ระบุสำหรับการเข้าถึง[หมายเหตุ 6 ] |
CLS | V | สั่งการ | ล้างข้อความและกราฟิกทั้งหมดออกจากหน้าจอ[ 29 ] | |
CODE | string | EXTENDED MODEแล้วI | หน้าที่/อื่นๆ | ส่งคืนหมายเลขที่สอดคล้องกับอักขระตัวแรกในชุดอักขระstringของคอมพิวเตอร์[ 27 ]ยังใช้เพื่อบันทึกหน่วยความจำแบบเป็นชิ้นๆ ลงในเทป ดิสก์ ฯลฯ และโหลดกลับเข้ามา – ดูและสำหรับรายละเอียดเพิ่มเติม LOADSAVEVERIFY |
CONTINUE | C | สั่งการ | เริ่มโปรแกรมใหม่อีกครั้งหลังจากหยุดทำงานเนื่องจากข้อผิดพลาดหรือผู้ใช้กดปุ่ม+ หรือปุ่ม[ 32 ]CAPS SHIFTSPACEBREAK | |
COPY | Z | สั่งการ | ส่งหน้าจอที่แสดงอยู่ในปัจจุบันไปยังเครื่องพิมพ์[ 33 ] | |
COS | number | EXTENDED MODEแล้วW | การทำงาน | ส่งคืนค่าโคไซน์ของnumber[ 34 ] |
DATA | comma-separated values | EXTENDED MODEแล้วD | คำสั่ง/อื่นๆ | จัดเตรียมตัวเลขและ/หรือสตริงเพื่อใช้กับREADคำสั่ง[ 35 ]และอนุญาตให้บันทึกเนื้อหาของอาร์เรย์ลงในเทปเมื่อใช้กับSAVEคำสั่ง[ 36 ] (เช่นSAVE filename DATA array name()) |
DEF FN | name(variable) = operation | EXTENDED MODEแล้ว1 | สั่งการ | กำหนดฟังก์ชันที่กำหนดเองซึ่งสามารถใช้กับFNคำสั่งได้ คำจำกัดความของฟังก์ชันต้องอยู่ในรูปแบบf(x)=operationsเช่นf(x)=x*2และชื่อฟังก์ชันต้องประกอบด้วยตัวอักษรไม่เกินหนึ่งตัว บวกกับสัญลักษณ์ $ หากฟังก์ชันส่งคืนสตริง[ 37 ] |
DIM | variable(dimensions) | D | สั่งการ | ประกาศอาร์เรย์ที่มีการระบุdimensionsซึ่งอาจเป็นแบบหลายมิติ (ตัวอย่างเช่นDIM a(10,10); หากใช้กับสตริง มิติสุดท้ายจะระบุความยาวของแต่ละสตริง (ดังนั้น จึงDIM A$(2,5)เป็นอาร์เรย์ของสองสตริง แต่ละสตริงมีความยาวห้าตัวอักษร และDIM B$(5)เป็นสตริงหนึ่งสตริงที่มีห้าตัวอักษร) [ 38 ] |
DRAW | x, y [, r] | W | สั่งการ | วาดเส้นด้วยINKสีปัจจุบันไปยังพิกัด ( x, y) จากพิกัดที่ใช้โดยคำสั่งก่อนหน้าPLOTหรือDRAWคำสั่งอื่น หากrมีการระบุตัวเลือก จะระบุถึงมุมของส่วนวงกลมที่จะวาดในหน่วยเรเดียน[ 39 ] |
ERASE | drive;"filename" | EXTENDED MODEจากนั้น+SYMBOL SHIFT7 | สั่งการ | ลบไฟล์ที่ระบุจากZX Microdrive [หมายเหตุ 6 ] [ 40 ] |
EXP | number | EXTENDED MODEแล้วX | การทำงาน | คืนค่าeเป็นกำลังnumber[ 41 ] |
FLASH | number | EXTENDED MODEจากนั้น+SYMBOL SHIFTV | คำสั่ง/อื่นๆ | ทำให้ข้อความต่อไปนี้ทั้งหมดสลับสีพื้นหน้า ( INK) และPAPERสีพื้นหลัง ( ) [หมายเหตุ 5 ] |
FN | function(value) | EXTENDED MODEจากนั้น+SYMBOL SHIFT2 | การทำงาน | เรียกใช้ฟังก์ชันfunctionที่กำหนดไว้ก่อนหน้านี้ในโปรแกรมโดยใช้DEF FN[ 37 ] |
FORMAT | drive;"name" | EXTENDED MODEจากนั้น+SYMBOL SHIFT0 | สั่งการ | ฟอร์แมตตลับในไมโครไดรฟ์ ที่ระบุ และกำหนดตัวระบุให้name[หมายเหตุ 6 ] [ 42 ] |
FOR | variable = start TO end | F | สั่งการ | เริ่มลูปFOR- [ 43 ]ชื่อตัวแปรอาจมีความยาวเพียงอักขระเดียว[ 44 ]NEXT |
GO SUB | number | H | สั่งการ | ทำให้โปรแกรมกระโดดไปยังบรรทัด BASIC ที่ระบุโดยnumber; เมื่อโปรแกรมพบคำสั่งRETURNมันจะกระโดดกลับไปยังคำสั่งหลังจากGO SUB[ 45 ] |
GO TO | number | G | สั่งการ | ทำให้โปรแกรมกระโดดไปยังบรรทัด BASIC ที่ระบุโดยnumber |
IF | condition THEN | U | สั่งการ | ประเมินค่าconditionและถ้าเป็นจริง จะดำเนินการตามคำสั่งที่ตามหลังคำหลักTHENที่ต้องอยู่หลังเงื่อนไข[ 46 ]ตัวอย่างเช่น[หมายเหตุ 7 ]IFA=1THENLETB=2 |
IN | address | EXTENDED MODEจากนั้น+SYMBOL SHIFTI | การทำงาน | ส่งคืนไบต์ที่อ่านจากพอร์ตอินพุต/เอาต์พุต ฮาร์ดแวร์ ที่สอดคล้องกับaddress[ 47 ] |
INK | number | EXTENDED MODEจากนั้น+SYMBOL SHIFTX | คำสั่ง/อื่นๆ | กำหนดสีพื้นหน้าสำหรับข้อความและกราฟิก[หมายเหตุ 4 ] [หมายเหตุ 5 ] [ 48 ] |
INKEY$ | | EXTENDED MODEจากนั้น+SYMBOL SHIFTZ | การทำงาน | ส่งคืนสตริงที่แสดงถึงปุ่มที่ถูกกดบนแป้นพิมพ์ในขณะที่ฟังก์ชันถูกเรียก หรือสตริงว่างหากไม่มีปุ่มใดถูกกด[ 49 ]แต่จะไม่รอการกดปุ่ม |
INPUT | [prompt,] variable | I | สั่งการ | หยุดการทำงานของโปรแกรมจนกว่าผู้ใช้จะพิมพ์อะไรบางอย่างลงบนแป้นพิมพ์และกดEnterปุ่ม จากนั้นจึงเก็บค่าที่ป้อนลงในตัวแปรที่ระบุvariableหากpromptมีการระบุตัวเลือกไว้ ค่านี้จะแสดงบนหน้าจอ[ 50 ] |
INT | number | EXTENDED MODEแล้วR | การทำงาน | ส่งคืน ค่า จำนวนเต็มของnumberโดยปัดเศษลงให้เป็นจำนวนเต็มที่ใกล้ที่สุด[ 16 ] (ดังนั้นINT -1.1จะคืนค่า −2 ไม่ใช่ −1) |
INVERSE | number | EXTENDED MODEจากนั้น+SYMBOL SHIFTM | คำสั่ง/อื่นๆ | หากค่าเป็น 1 จะกลับสีของข้อความทั้งหมดที่ตามมาnumberโดยใช้สีหมึกปัจจุบันสำหรับพื้นหลังและสีกระดาษปัจจุบันสำหรับข้อความ หรือตั้งค่ากลับเป็นปกติหากnumberค่าเป็น 0 [หมายเหตุ 5 ] [ 51 ] |
LEN | string | EXTENDED MODEแล้วK | การทำงาน | ส่งคืนจำนวนอักขระ (ไบต์) ในstring[ 52 ] |
LET | variable=value | L | สั่งการ | กำหนดให้valueกับตัวแปรชื่อ[ 53 ] |
LINE | | EXTENDED MODEจากนั้น+SYMBOL SHIFT3 | อื่น | |
LIST | [number] | K | สั่งการ | แสดงผลโปรแกรม BASIC ปัจจุบันบนหน้าจอ หากnumberมีการระบุตัวเลือก จะละเว้นบรรทัดทั้งหมดที่มีหมายเลขต่ำกว่า[ 55 ] |
LLIST | [number] | EXTENDED MODEจากนั้น+SYMBOL SHIFTV | สั่งการ | ยกเว้นLISTรายการที่จะส่งออกไปยังเครื่องพิมพ์[ 33 ] |
LN | number | EXTENDED MODEจากนั้น+SYMBOL SHIFTZ | การทำงาน | ส่งคืนลอการิทึมธรรมชาติของnumber[ 56 ] |
LOAD | "filename" DATA variable() | [CODE [start[, length]]] | SCREEN$ | J | สั่งการ | โหลดจากเทปหรืออุปกรณ์จัดเก็บข้อมูลอื่น โดยใช้ไฟล์ ที่ระบุ หรือไฟล์แรกที่พบหาก ระบุ filenameสตริงว่าง ( )""
|
LPRINT | text | EXTENDED MODEจากนั้น+SYMBOL SHIFTC | สั่งการ | ยกเว้นPRINTผลลัพธ์ที่ส่งไปยังเครื่องพิมพ์[ 33 ] |
MERGE | "[filename]" | EXTENDED MODEจากนั้น+SYMBOL SHIFTT | สั่งการ | เช่นLOADเดียวกับ ยกเว้นว่าจะไม่ลบโปรแกรมและตัวแปรปัจจุบัน หากมีหมายเลขบรรทัดอยู่ในทั้งสอง โปรแกรมที่โหลดใหม่จะเขียนทับโปรแกรมที่มีอยู่ การใช้MERGEจะป้องกันไม่ให้โปรแกรมที่บันทึกโดยใช้LINEทำงานโดยอัตโนมัติเมื่อโหลดแล้ว[ 57 ] |
MOVE | stream1 TO stream2 | EXTENDED MODEจากนั้น+SYMBOL SHIFT6 | สั่งการ | ย้ายข้อมูลจากสตรีมหนึ่ง (แป้นพิมพ์ หน้าจอ ไฟล์ เครื่องพิมพ์ เครือข่าย ฯลฯ) ไปยังอีก สตรีมหนึ่ง [หมายเหตุ 6 ] [ 58 ] |
NEW | A | สั่งการ | ลบโปรแกรม BASIC ปัจจุบันและตัวแปรทั้งหมด[ 50 ] | |
NEXT | variable | N | สั่งการ | ปิด ลูป FOR- NEXTตัวแปรต้องตรงกับFORคำสั่ง ที่เกี่ยวข้อง [ 59 ] – ไม่อนุญาตให้ ใช้ "ค่าว่าง" NEXTเพื่ออ้างถึงคำสั่งก่อนหน้าในโปรแกรมทันทีFOR |
NOT | condition | SYMBOL SHIFT+S | ตัวดำเนินการตรรกะ | ส่งคืนค่าจริงหากconditionเป็นเท็จ มิฉะนั้นจะส่งคืนค่าเท็จ[หมายเหตุ 3 ] [ 18 ] |
OPEN # | stream | EXTENDED MODEจากนั้น+SYMBOL SHIFT4 | สั่งการ | เปิดสตรีมสำหรับการอ่านและ/หรือการเขียน[หมายเหตุ 6 ] [ 60 ] |
OR | SYMBOL SHIFT+Y | ตัวดำเนินการตรรกะ | ส่งคืนค่า true หากเงื่อนไขใดเงื่อนไขหนึ่งทางด้านใดด้านหนึ่งของORคำหลักเป็นจริง มิฉะนั้นจะส่งคืนค่า false [หมายเหตุ 3 ] [ 18 ] | |
OUT | address, value | EXTENDED MODEจากนั้น+SYMBOL SHIFTO | สั่งการ | ส่งvalue( ไบต์ ) ไปยังพอร์ตอินพุต/เอาต์พุตฮาร์ดแวร์ที่สอดคล้องกับ[address 47 ] |
OVER | number | EXTENDED MODEจากนั้น+SYMBOL SHIFTN | คำสั่ง/อื่นๆ | จะทำการพิมพ์ทับข้อความต่อไปนี้ด้วยการดำเนินการ XOR กับข้อความที่มีอยู่บนหน้าจอหากnumberเป็น 1 แทนที่จะลบ หรือลบหากnumberเป็น 0 [หมายเหตุ 5 ] [ 51 ] |
PAPER | number | EXTENDED MODEจากนั้น+SYMBOL SHIFTC | คำสั่ง/อื่นๆ | กำหนดสีพื้นหลังสำหรับข้อความและกราฟิก[หมายเหตุ 4 ] [หมายเหตุ 5 ] [ 48 ] |
PAUSE | delay | M | สั่งการ | หยุดการทำงานของโปรแกรมตามระยะเวลาที่กำหนด คือ1/2 วินาทีในยุโรปหรืออเมริกาเหนือ[ 61 ] (ดังนั้นจะหยุดเป็นเวลา 1 วินาทีในยุโรป) และจะดำเนินการต่อหลังจากกดปุ่ม PAUSE 50 |
PEEK | address | EXTENDED MODEแล้วO | การทำงาน | ส่งคืนไบต์ที่แสดงถึงเนื้อหาของตำแหน่งหน่วยความจำที่ชี้โดยaddress[ 62 ] |
PI | | EXTENDED MODEแล้วM | การทำงาน | ส่งคืนค่าของpi [ 56 ] |
PLOT | x, y | Q | สั่งการ | วาดพิกเซลในINKสีปัจจุบันบนหน้าจอที่พิกัด ( x, y) [ 63 ] |
POINT | (x,y) | EXTENDED MODEจากนั้น+SYMBOL SHIFT8 | การทำงาน | ส่งคืนค่า 1 หากพิกเซลที่ชี้ไปยังพิกัดกราฟิก ( x, y) อยู่ในสีหมึก (สีพื้นหน้า) ในปัจจุบัน มิฉะนั้นจะส่งคืนค่า 0 [ 28 ] |
POKE | address, value | O | สั่งการ | ตั้งค่าเนื้อหาaddressใน RAM เป็นvalue[ 64 ] |
PRINT | [AT x,y;] text | P | สั่งการ | พิมพ์text(ซึ่งต้องเป็นสตริงหรือตัวเลขอย่างน้อยหนึ่งตัวที่คั่นด้วยเครื่องหมายเซมิโคลอน) ลงบนหน้าจอ[ 53 ]หากใช้กับ #0 หรือ #1 จะพิมพ์ในสองบรรทัดล่างสุด (อินพุต) ของหน้าจอ หากใช้กับATจะพิมพ์ที่พิกัดข้อความที่ระบุ มิฉะนั้น จะพิมพ์ทันทีต่อจากเอาต์พุตของPRINTคำสั่งก่อนหน้าใดๆ (หากคำสั่งก่อนหน้าลงท้ายด้วยเครื่องหมายเซมิโคลอน) หรือในคอลัมน์แรกของบรรทัดด้านล่างPRINTเอาต์พุต ก่อนหน้า [ 20 ]โดยค่าเริ่มต้นคือ 0,0 |
RANDOMIZE | [number] | T | สั่งการ | เริ่มต้นตัวสร้างเลขสุ่มหากใช้โดยไม่มี a number(หรือด้วย 0) จะทำสิ่งนี้โดยอิงตามนาฬิกาภายในของคอมพิวเตอร์ มิฉะนั้นจะใช้numberค่าที่ให้มา ซึ่งต้องอยู่ในช่วง [1,65535] [ 65 ] |
READ | variable | EXTENDED MODEแล้วA | สั่งการ | รับค่าจากDATAคำสั่งและเก็บไว้ในชื่อvariable: ครั้งแรกREADที่ใช้ จะได้รับค่าแรกหลังจากค่าแรกDATAครั้งที่สองจะได้รับค่าถัดไป และต่อไปเรื่อยๆ[ 35 ] |
REM | ข้อความ | E | สั่งการ | เริ่มการแสดงความคิดเห็นในซอร์สโค้ด หมายความว่าทุกอย่างหลังจากREMคำสั่งจะถูกละเว้นจนถึงสิ้นสุดบรรทัด[ 50 ] – โปรดทราบว่ารวมถึงทุกอย่างหลังจากเครื่องหมายโคลอน ซึ่งโดยปกติจะเริ่มต้นส่วนใหม่: จะไม่สร้างเอาต์พุตใดๆ ตัวอย่างเช่น 10REM Nothing to see here: PRINT "Unprintable" |
RESTORE | [number] | EXTENDED MODEแล้วS | สั่งการ | รีเซ็ตตำแหน่งที่READคำสั่งค้นหาค่าในDATAคำสั่ง: หากใช้โดยไม่มีหมายเลข คำสั่งถัดไปREADจะใช้คำสั่งแรกDATAในโปรแกรม หากใช้โดยมีหมายเลข คำสั่งถัดไปจะใช้คำสั่งแรกDATAในบรรทัดหรือหลังจากบรรทัดที่มีหมายเลขระบุไว้[ 66 ] |
RETURN | Y | สั่งการ | คืนค่าการดำเนินการไปยังคำสั่งแรกถัดจากGO SUBคำสั่งสุดท้ายที่ถูกดำเนินการ[ 45 ] | |
RND | | EXTENDED MODEแล้วT | การทำงาน | ส่งคืนตัวเลขสุ่มเทียมที่มีตัวเลขสำคัญ แปดหลัก ในช่วง [0,1) [ 67 ] |
RUN | [number] | R | สั่งการ | เริ่มโปรแกรม BASIC ปัจจุบันจากบรรทัดแรกหากไม่numberได้ระบุไว้ มิฉะนั้นจะเริ่มจากบรรทัดที่มีหมายเลขนั้น (หรือบรรทัดแรกถัดไปหากไม่มีอยู่) [ 68 ] |
SAVE | "filename" [DATA variable() | LINE number | CODE start, length | SCREEN$] | S | สั่งการ | บันทึกไปยังเทปหรืออุปกรณ์จัดเก็บข้อมูลอื่นตามที่filenameระบุไว้
|
SCREEN$ | [(line, column)] | EXTENDED MODEจากนั้น+SYMBOL SHIFT | หน้าที่/อื่นๆ | ในฐานะฟังก์ชัน จะระบุอักขระที่บรรทัดและคอลัมน์ที่ระบุบนหน้าจอ[ 20 ] ใช้หลังจากชื่อไฟล์ใน คำสั่ง LOADหรือSAVEระบุว่าควรโหลดหรือบันทึกเนื้อหาของหน่วยความจำแสดงผลซึ่งโดยพื้นฐานแล้วทำให้เป็นทางลัดสำหรับCODE 16384,6912[หมายเหตุ 8 ]แต่ใช้งานไม่ได้กับVERIFYเนื่องจากเนื้อหาของหน่วยความจำแสดงผลจะแตกต่างกันเมื่อถึงเวลาที่คำสั่งอ่านข้อมูลที่บันทึกไว้กลับมา[ 69 ] |
SGN | number | EXTENDED MODEแล้วF | การทำงาน | ส่งคืนค่า 1 ถ้าnumberเป็นค่าบวก 0 ถ้าเป็น 0 และ −1 ถ้าเป็นค่าลบ[ 16 ] |
SIN | number | EXTENDED MODEแล้วQ | การทำงาน | ส่งคืนค่าไซน์ของnumber[ 34 ] |
STEP | number | SYMBOL SHIFT+D | อื่น | ระบุช่วงเวลาที่ใช้โดยFORคำสั่ง[ 44 ]ตัวอย่างเช่นจะข้ามและในลูป FORn=2TO6STEP2n=3n=5 |
STOP | SYMBOL SHIFT+A | สั่งการ | ยุติการทำงานของโปรแกรมปัจจุบัน ออกไปยังตัวแก้ไข BASIC นอกจากนี้ยังสามารถให้เมื่อคอมพิวเตอร์กำลังรออินพุตโดยใช้INPUTคำสั่ง[ 68 ]เมื่อโปรแกรมหยุดทำงานแล้ว สามารถดำเนินการต่อได้ด้วยCONTINUE | |
SQR | number | EXTENDED MODEแล้วH | การทำงาน | คืนค่ารากที่สองของnumber[ 37 ] |
STR$ | number | EXTENDED MODEแล้วY | การทำงาน | แปลงตัวเลขเป็นสตริง |
TAB | column | EXTENDED MODEแล้วP | อื่น | ในPRINTคำสั่งดังกล่าว ให้แน่ใจว่าข้อความที่จะแสดงผลเริ่มต้นในคอลัมน์ที่ระบุ โดยขึ้นบรรทัดใหม่ตามความจำเป็น แต่ไม่เกินหนึ่งบรรทัด[ 29 ] |
TAN | number | EXTENDED MODEแล้วE | การทำงาน | ส่งคืนค่าแทนเจนต์ของnumber[ 70 ] |
THEN | statement | SYMBOL SHIFT+G | อื่น | ตามด้วยเงื่อนไขในIFข้อความเพื่อระบุสิ่งที่ควรเกิดขึ้นเมื่อเงื่อนไขประเมินค่าเป็นจริง[หมายเหตุ 7 ] [ 46 ] |
TO | | SYMBOL SHIFT+F | อื่น | ระบุช่วงตั้งแต่ตัวเลขทางซ้ายไปTOจนถึงตัวเลขทางขวา รวมทั้งสองค่าด้วย[ 71 ]เมื่อใช้กับFORตัวเลขทั้งสองจะต้องระบุ ในขณะที่หากใช้เพื่อแบ่งสตริง อาจเว้นตัวเลขใดตัวเลขหนึ่งไว้เพื่อระบุจุดเริ่มต้นหรือจุดสิ้นสุดของสตริง |
USR | string or address | EXTENDED MODEแล้วL | การทำงาน | เมื่อเรียกใช้ด้วยสตริงอักขระตัวเดียว ฟังก์ชันนี้จะส่งคืนที่อยู่หน่วยความจำที่กำหนดสัญลักษณ์สำหรับอักขระกราฟิกที่ผู้ใช้กำหนดซึ่งสอดคล้องกับอักขระนั้น[ 23 ]หากเรียกใช้ด้วยที่อยู่ ฟังก์ชันนี้จะเริ่ม การทำงาน ของโค้ดเครื่องที่ที่อยู่นั้น (ทำให้เป็นหนึ่งในฟังก์ชัน Sinclair BASIC ไม่กี่ฟังก์ชันที่มีผลข้างเคียง ) และส่งคืนเนื้อหาของคู่รีจิสเตอร์ BC ของZ80 [ 72 ] |
VAL | string | EXTENDED MODEแล้วJ | การทำงาน | ประเมินค่าstringเป็นตัวเลขและส่งคืนผลลัพธ์[ 73 ]ซึ่งสามารถดำเนินการคำนวณได้ เช่นVAL "1+2"ส่งคืน 3 และยังประเมินตัวแปรและแม้แต่VALคำสั่ง อื่นๆ [หมายเหตุ 9 ]ก็ส่งคืน 3 เช่นกัน LETA=1:VAL"A+VAL ""2""" |
VAL$ | string | EXTENDED MODEจากนั้น+SYMBOL SHIFTJ | การทำงาน | คล้ายกันVALแต่ประเมินสตริงเป็นสตริง[ 16 ] |
VERIFY | "[filename]" | EXTENDED MODEจากนั้น+SYMBOL SHIFTR | สั่งการ | อ่านโปรแกรมหรือข้อมูลจากเทปหรืออุปกรณ์จัดเก็บข้อมูลอื่นๆ คล้ายกับLOADแต่แทนที่จะโหลดลงในหน่วยความจำ จะเปรียบเทียบกับโปรแกรมหรือข้อมูลที่มีอยู่ในหน่วยความจำอยู่แล้ว วิธีนี้มีไว้สำหรับใช้ทันทีหลังจากSAVEคำสั่ง เพื่อให้แน่ใจว่าโปรแกรมหรือข้อมูลได้รับการบันทึกโดยไม่เสียหาย[ 74 ] |
ฉบับทางการ
4K พื้นฐาน
4K BASICสำหรับ ZX80 [ 75 ] (ตั้งชื่อตาม หน่วยความจำอ่านอย่างเดียว (ROM) ขนาด 4 KiB ) ได้รับการพัฒนาโดย John Grant จาก Nine Tiles สำหรับ ZX80 โดยมีการคำนวณเลขจำนวนเต็มเท่านั้น
- คำสั่งระบบ:
NEWRUNLISTLOADSAVE - คำสั่งควบคุม:
GOTOIFTHENGOSUBSTOPRETURNFORTONEXTCONTINUE - คำสั่งรับ/ส่งข้อมูล:
PRINTINPUT - คำชี้แจงการมอบหมายงาน:
LET - ข้อความอื่นๆ:
CLEARCLSDIMREMRANDOMIZEPOKE - ฟังก์ชัน:
ABSCHR$CODEPEEKRNDSTR$TL$USR
8K พื้นฐาน
8K BASICคือ ZX81 BASIC (มีให้ใช้งานในรูปแบบอัปเกรดสำหรับ ZX80 [ 5 ] ด้วย ) ซึ่งได้รับการปรับปรุงด้วยการคำนวณเลขทศนิยมโดยSteve Vickersและตั้งชื่อตามที่อยู่ใน ROM ขนาด 8 KiB
- คำแถลงการณ์:
PRINTRANDLETCLEARRUNLISTGOTOCONTINPUTNEWREMPRINTSTOPBREAKIFSTOPFORNEXTTOSTEPSLOWFASTGOSUBRETURNSAVELOADCLSSCROLLPLOTUNPLOTPAUSELPRINTLLISTCOPYDIMPOKENEW - ฟังก์ชัน:
ABSSGNSINCOSTANASNACSATNLNEXPSQRINTPIRNDFUNCTIONLENVALSTR$NOTCODECHR$INKEY$ATTABINKEY$PEEKUSR
48 พื้นฐาน
48 BASICคือ BASIC สำหรับ ZX Spectrum รุ่นดั้งเดิมที่มี RAM 16/48 KB (และเครื่องเลียนแบบ) โดยมีการเพิ่มสีและอุปกรณ์ต่อพ่วงเพิ่มเติมโดย Steve Vickers และ John Grant มันถูกจัดเก็บไว้ใน ROM ขนาด 16 KB และเริ่มถูกเรียกว่า 48 BASIC เมื่อมีการเปิดตัว ZX Spectrum 128 ซึ่งในขณะนั้น Spectrum ขนาด 16 KB ไม่ได้วางจำหน่ายอีกต่อไป และเครื่องที่มีอยู่ส่วนใหญ่ที่ใช้งานอยู่ได้รับการอัปเกรดเป็น 48 KB แล้ว[ 6 ]
128 พื้นฐาน
128 BASICคือ BASIC สำหรับ ZX Spectrum 128 [ 7 ]มีคำสั่งเพิ่มเติมและใช้การป้อนข้อมูลทีละตัวอักษร
- คำสั่งใหม่:
LOAD !SAVE !MERGE !ERASE !PLAYSPECTRUM
+3 พื้นฐาน
+3 BASICคือ BASIC ที่รองรับดิสก์สำหรับ ZX Spectrum +3 และ +2A [ 6 ]
- คำสั่งใหม่:
FORMATCOPY
ที/เอส 2000 เบสิก
T/S 2000 BASIC ถูกใช้ใน Timex Sinclair 2068 (T/S 2068) ที่เข้ากันได้กับ Spectrum และเพิ่มคีย์เวิร์ดใหม่ต่อไปนี้หกคำ:
DELETEลบช่วงบรรทัดของโปรแกรม BASICFREEเป็นฟังก์ชันที่แสดงปริมาณ RAM ที่ว่างอยู่PRINT FREEจะแสดงให้เห็นว่ามี RAM ว่างอยู่เท่าใดON ERRเป็นฟังก์ชันจัดการข้อผิดพลาดที่ใช้เป็นส่วนใหญ่เช่นON ERR GO TOหรือON ERR CONTRESETสามารถใช้เพื่อรีเซ็ตพฤติกรรมของ นอกจากON ERRนี้ยังตั้งใจที่จะใช้รีเซ็ตอุปกรณ์ต่อพ่วงด้วยSOUNDควบคุมชิปเสียงAY- 3-8192STICKเป็นฟังก์ชันที่แสดงตำแหน่งของจอยสติ๊กภายใน (Timex Sinclair 2090)
เบสิก64
BASIC64โดยTimex ของโปรตุเกสเป็นส่วนขยายซอฟต์แวร์[ 76 ]เพื่อให้สามารถเขียนโปรแกรม Basic ได้ดีขึ้นด้วยโหมดกราฟิกพื้นที่แสดงผล 512×192 และแบบสองหน้าจอ ซึ่งมีเฉพาะใน คอมพิวเตอร์ Timex Sinclair เท่านั้น ส่วนขยายนี้เพิ่มคำสั่งและทำการแมปหน่วยความจำใหม่ทั้งหมดเพื่อหลีกเลี่ยงไม่ให้ระบบเขียนทับพื้นที่หน่วยความจำหน้าจอที่ขยาย มีสองเวอร์ชันเนื่องจากแผนที่หน่วยความจำที่แตกต่างกัน – เวอร์ชันสำหรับTC 2048และเวอร์ชันสำหรับ T/S 2068 และTC 2068
PRINT #พิมพ์ไปยังช่องสัญญาณเอาต์พุตเฉพาะLIST #ระบุรายการโปรแกรมไปยังช่องสัญญาณเอาต์พุตเฉพาะCLS*ล้างพื้นที่แสดงผลทั้งสองส่วนINK*กำหนดสีหมึกสำหรับพื้นที่แสดงผลทั้งสองส่วนPAPER*ชุดกระดาษสีสำหรับพื้นที่แสดงผลทั้งสองส่วนSCREEN$เลือกโหมดความละเอียดสูง/ปกติPLOT*วาดพิกเซลและอัปเดตตำแหน่งการวาดLINEลากเส้นจากตำแหน่ง PLOT ก่อนหน้า เพื่อรองรับการวาดส่วนโค้งCIRCLE*วาดวงกลมหรือวงรี ขึ้นอยู่กับโหมดหน้าจอ
ไทม์เอ็กซ์ เอ็กซ์เอ็กซ์ เบส
Timex Extended Basicโดย Timex ของโปรตุเกสถูกใช้ในคอมพิวเตอร์ Timex 3256โดยเพิ่ม คำสั่ง TEC – Timex Extended Commandsที่รองรับชิปเสียง AY-3-8912 เครือข่าย RS-232 และโหมดกราฟิกความละเอียดสูง 512x192 พิกเซล[ 77 ] [ 78 ]
- คำสั่งไดรฟ์ RAM:
LOAD!SAVE!CAT!MERGE!ERASE!CLEAR! - คำสั่ง RS-232:
FORMAT!LPRINTLLIST - คำสั่ง AY-3-8912:
BEEP! - คำสั่งสำหรับความละเอียด 512 x 192:
SCREEN$DRAW!PLOT!CIRCLE!
เวอร์ชันอื่นๆ ส่วนขยาย อนุพันธ์ และผู้สืบทอด
ตัวแปลภาษาสำหรับตระกูล ZX Spectrum
มีตัวแปลภาษา ZX Spectrum หลายตัว[ 79 ]
- Beta BASICโดย ดร. แอนดี้ ไรท์ เดิมทีเป็นส่วนขยายของ BASICแต่ต่อมากลายเป็นตัวแปลภาษาแบบเต็มรูปแบบ [ 80 ]
- YS MegaBasicโดย ไมค์ ลีแมน [ 79 ] [ 81 ]
- ZebraOSโดย Zebra Systems ในนิวยอร์ก เป็น เวอร์ชัน ตลับของ T/S 2000 BASIC ที่ใช้โหมดหน้าจอ 512×192 [ 82 ]
- Sea Change ROMโดย Steve Vickers และ Ian Logan ดัดแปลงโดย Geoff Wearmouth ซึ่งเป็น ROM ทดแทนที่มี Sinclair BASIC ที่ได้รับการปรับปรุง [ 83 ]
- Gosh Wonderfulโดย Geoff Wearmouth ซึ่งเป็น ROM ทดแทนที่แก้ไขข้อบกพร่องและเพิ่มโทเคไนเซอร์ ตัวแสดงรายการสตรีม คำสั่งลบและกำหนดหมายเลขใหม่[ 79 ] [ 84 ]
- OpenSE BASIC (เดิมคือ SE BASIC) โดย Andrew Owen ซึ่งเป็น ROM ทดแทนที่มีการแก้ไขข้อบกพร่องและการปรับปรุงมากมาย รวมถึงการสนับสนุน ULAplus [ 85 ]เผยแพร่เป็นโอเพนซอร์สในปี 2011 [ 86 ] [ 87 ] [ 88 ]
คอมไพเลอร์สำหรับตระกูล ZX Spectrum
มีคอมไพเลอร์ ZX Spectrum หลายตัว[ 79 ]
- คอมไพเลอร์ HiSoft COLT (หรือที่รู้จักกันในชื่อ คอมไพเลอร์จำนวนเต็ม HiSoft COLT) [ 89 ] [ 90 ]
- HiSoft BASIC (หรือที่รู้จักกันในชื่อ HiSoft BASIC Compiler) คอมไพเลอร์ที่รองรับจำนวนเต็มและจุดลอยตัว [ 91 ] [ 92 ]
- คอมไพเลอร์เลเซอร์[ 93 ] [ 94 ]
- คอมไพเลอร์จำนวนเต็ม 'IS' ของ Softek [ 95 ] [ 96 ] (รุ่นต่อจากคอมไพเลอร์จำนวนเต็มของ Softek [ 97 ] )
- คอมไพเลอร์ Softek 'FP' แบบเต็ม[ 98 ] [ 99 ]
- ตัวคอมไพเลอร์ ZIP [ 100 ] [ 101 ]
อนุพันธ์และรุ่นต่อยอดสำหรับคอมพิวเตอร์อื่นๆ
- SuperBASICเป็นภาษา BASIC ขั้นสูงกว่ามากที่เปิดตัวพร้อมกับ คอมพิวเตอร์ส่วนบุคคล Sinclair QLโดยมีความคล้ายคลึงกับ Sinclair BASIC รุ่นก่อนหน้าอยู่บ้าง [ 102 ]
- SAM Basicซึ่งเป็น BASIC บนSAM Coupéโดยทั่วไปถือว่าเป็น ZX Spectrum เวอร์ชันลอกเลียน แบบ [ 103 ]
- ROMU6โดย Cesar และ Juan Hernandez – MSX [ 79 ]
- Spectrum 48โดย Whitby Computers – Commodore 64 [ 79 ]
- Sparky eSinclair BASICโดย Richard Kelsh ระบบปฏิบัติการที่อิงตาม ZX Spectrum BASIC อย่างหลวมๆ – Zilog eZ80 [ 104 ]
- Sinbasโดย Pavel Napravnik – MS-DOS [ 79 ]
- Basic [ 105 ] (และ CheckBasic [ 106 ] ) โดย Philip Kendall – Unix
- BINSIC [ 107 ]โดย Adrian McMenamin ซึ่งเป็นการนำกลับมาใช้ใหม่ในGroovyโดยจำลองมาจาก ZX81 BASIC – Java อย่างใกล้ชิด
- BASin [ 108 ]โดย Paul Dunn สภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) ของ Sinclair BASIC ที่สมบูรณ์แบบโดยอิงจากโปรแกรมจำลอง ZX Spectrum [ 79 ] – Windows
- SpecBAS [ 109 ] (หรือที่รู้จักกันในชื่อ SpecOS) โดย Paul Dunn ซึ่งเป็นสภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) ที่ให้ชุดซูเปอร์เซ็ตที่ได้รับการปรับปรุงของ Sinclair BASIC – Windows , Linux , PandoraและRaspberry Pi
- ZX-Basic [ 110 ] – คอมไพเลอร์ที่เข้ากันได้กับเวอร์ชันก่อนหน้า แต่ได้รับการปรับปรุงสำหรับโปรแกรม Sinclair BASIC บน ZX Spectrum เขียนด้วยภาษา Pythonสามารถใช้งานได้ฟรีบน Windows, Linux และMac OS
- ZX-Basicus [ 111 ]โดย Juan-Antonio Fernández-Madrigal ซึ่งเป็นซินเธไซเซอร์ วิเคราะห์ปรับแต่ง ตีความ และดีบักเกอร์ของ Sinclair BASIC 48K สำหรับพีซี สามารถดาวน์โหลดได้ฟรีสำหรับ Linux และ Windows
ดูเพิ่มเติม
- รายชื่อโปรแกรมจำลองระบบคอมพิวเตอร์ § Sinclair ZX80
- รายชื่อโปรแกรมจำลองระบบคอมพิวเตอร์ § Sinclair ZX81
- รายชื่อโปรแกรมจำลองระบบคอมพิวเตอร์ § Sinclair ZX Spectrum และเครื่องเลียนแบบ
หมายเหตุ
- ^พารามิเตอร์เสริมจะอยู่ในวงเล็บเหลี่ยม [ ]
- ^ข้อสันนิษฐานเหล่านี้คือคอมพิวเตอร์อยู่ใน โหมด K (คีย์เวิร์ด) ซึ่งโดยปกติจะอยู่ในตอนต้นบรรทัดเมื่อป้อน BASIC บน Spectrum 16K และ 48K การเข้าสู่โหมดขยายทำได้โดยการกดปุ่มพร้อมกัน แทนที่จะใช้ปุ่มที่มีอยู่ใน Spectrum+ และรุ่นที่ใหม่กว่าCAPS SHIFTSYMBOL SHIFTEXTENDED MODE
- ^ a b cในภาษา Sinclair BASIC ค่า "เท็จ" จะเท่ากับ 0 (ศูนย์) ส่วนค่าอื่นๆ จะเท่ากับ "จริง" ดังนั้น ฟังก์ชันที่ส่งค่ากลับเป็นเท็จหรือจริง จะส่งค่า 0 สำหรับเท็จและ 1 สำหรับจริง ในขณะที่โดย
ANDปกติแล้วจะส่งค่าเงื่อนไขแรกที่ระบุไว้สำหรับค่าจริง หรือ 1 หากไม่ได้ระบุค่าตัวเลขใดๆ ตัวอย่างเช่น จะ6 AND 7ส่งค่ากลับเป็น 6 ในขณะที่NOT 6=7จะส่งค่ากลับเป็น 1 - ^ a b cหมายเลขสีที่มีให้เลือกคือ:
1 2 3 4 5 6 7 0 สีฟ้า สีแดง สีม่วงแดง สีเขียว สีฟ้าอมเขียว สีเหลือง สีขาว สีดำ ในคำสั่งที่เกี่ยวข้องกับสีทั้งหมด สามารถใช้เลข 8 เพื่อระบุ "โปร่งใส" ขณะใช้งาน
INKและPAPERสามารถตั้งค่าเป็น 9 สำหรับ "ความคมชัด" ได้เช่นกัน กล่าวคือ เพื่อแสดงสีเข้มบนพื้นหลังสีอ่อน หรือในทางกลับกันโดยอัตโนมัติ - ^ a b c d e f
INK,PAPER,FLASH,BRIGHT,OVERและINVERSEกำหนดคุณสมบัติสำหรับการแสดงผลข้อความและกราฟิกบนหน้าจอ สามารถใช้เป็นคำสั่งเพื่อนำไปใช้กับผลลัพธ์ทั้งหมดที่ตามมาจนกว่าจะมีการตั้งค่าใหม่ หรือใช้ภายในPRINTคำสั่งเพื่อนำไปใช้เฉพาะตั้งแต่จุดนั้นจนถึงสิ้นสุดคำสั่ง - ^ a b c d e f
CAT,ERASE,FORMATและMOVEเดิมทีออกแบบมาเพื่อใช้กับอุปกรณ์ต่อพ่วง แต่เมื่อเปิดตัว ZX Spectrum คำสั่งเหล่านี้ยังไม่ได้ถูกนำไปใช้งานอย่างสมบูรณ์ ทำให้การใช้งานคำสั่งเหล่านี้สร้างข้อความแสดงข้อผิดพลาด (Invalid Stream) ต่อมา ด้วยความช่วยเหลือของ ROM เงา ZX Interface 1 คำสั่งเหล่านี้จึงถูกนำมาใช้กับZX Microdrive (ROM เงาจะถูกเรียกใช้งานเมื่อตัวแปลภาษา BASIC ตรวจพบข้อผิดพลาดทางไวยากรณ์ ซึ่งเป็นเหตุผลว่าทำไมคำสั่งส่วนใหญ่ของ ZX Microdrive จึงใช้ a"*") - ^ a bแตกต่างจากภาษา BASIC อื่นๆ หลายภาษา ภาษา Sinclair Basic ไม่ได้รวม
ELSEตัวดำเนินการไว้ใน ข้อความIF–THEN[–ELSE] วิธีแก้ปัญหาคือการใช้ โครงสร้างIF–THEN–GO TOแทน โดยข้ามบรรทัดที่ควรอยู่ในELSEข้อความที่มีตัวดำเนินการGO TO - ^หน่วยความจำแสดงผลของ Spectrum เริ่มต้นที่แอดเดรส 16384 และมีความยาว 6912 ไบต์
- ^ในภาษา Sinclair BASIC สตริงที่อยู่ภายในสตริงจะต้องใส่เครื่องหมายคำพูดซ้ำสองครั้ง
บรรณานุกรม
- อดัมสัน, เอียน; เคนเนดี, ริชาร์ด (1986). ซินแคลร์และเทคโนโลยี 'รุ่งอรุณ'เพนกวิน
- Ardley, Neil (1984). คู่มือผู้ใช้ Sinclair ZX Spectrum+ Dorling Kindersleyร่วมกับ Sinclair Research. ISBN 0-86318-080-9.
- วิคเกอร์ส, สตีเวน (1982). การเขียนโปรแกรม BASIC สำหรับ Sinclair ZX Spectrum . ซินแคลร์ รีเสิร์ช.
- วิคเกอร์ส, สตีเวน (1983). การเขียนโปรแกรม BASIC สำหรับ Sinclair ZX Spectrum (ฉบับที่ 2). ซินแคลร์ รีเสิร์ช.
- Cambridge Communication (1983). คู่มือการใช้งาน Sinclair ZX Spectrum Microdrive และ Interface 1. Sinclair Research.
ลิงก์ภายนอก
- การเขียนโปรแกรม BASIC สำหรับ Sinclair ZX Spectrum : คู่มือฉบับดั้งเดิมปี 1982 โดย Steven Vickers (อ้างอิงข้างต้น)
- การเขียนโปรแกรม Sinclair ZX81 Basic เก็บถาวรเมื่อวันที่ 22 เมษายน 2550 ที่Wayback Machine : โดย Vickers เช่นกัน
- ประวัติความเป็นมาของภาษาโปรแกรม Sinclair BASIC : โดย แอนดรูว์ โอเวน
- Timex Computer World : คู่มือการใช้งานพื้นฐาน 64 บิต สำหรับคอมพิวเตอร์ Timex รุ่น 2048
- ไวยากรณ์ Sinclair BASIC : ข้อกำหนดไวยากรณ์ LL(1) สำหรับการแยกวิเคราะห์ Sinclair BASIC 16/48K
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ซินแคลร์ เบสิก
Sinclair BASICเป็นภาษาโปรแกรมBASICที่ใช้ในคอมพิวเตอร์บ้าน8 บิต จากSinclair Research , Timex SinclairและAmstrad ตัวแปลภาษา Sinclair BASIC เขียนโดย Nine Tiles Networks Ltd.
ประวัติศาสตร์
Clive Sinclair ได้พบกับ John Grant เจ้าของ Nine Tiles ในเดือนเมษายน พ.ศ.
การแก้ไขโปรแกรม
เช่นเดียวกับภาษา BASIC สำหรับคอมพิวเตอร์ส่วนบุคคลส่วนใหญ่ ภาษา BASIC ของ Sinclair มีแกนหลักอยู่ที่ ตัวแก้ไขบรรทัด เมื่อเครื่องเริ่มทำงาน มันจะรัน BASIC และแสดง ตัวอักษร "K" กลับด้านที่ด้านล่างของหน้าจอเพื่อระบุจุดเริ่มต้น เมื่อป้อนบรรทัดและ NEW LINE กดปุ่ม...
ประเภทข้อมูล
คุณลักษณะที่แปลกไปจากภาษาอื่น ๆ ของ Sinclair BASIC คือวิธีการจัดเก็บตัวแปรในหน่วยความจำ โดยทั่วไปแล้ว ตัวแปลภาษาจะใช้ช่องเก็บข้อมูลขนาดคงที่เพื่อเก็บข้อมูล ทำให้ง่ายต่อการสแกนตารางตัวแปร แต่เนื่องจากหน่วยความจำของซีรี่ส์ ZX มีจำกัดมาก...