กลับไปหน้าบทความ

อ่าน 9 นาที

ระบบ Acorn พื้นฐาน

Acorn System BASIC และ Atom BASIC เป็น ภาษาโปรแกรม BASIC สองรูปแบบที่เกี่ยวข้องกันอย่างใกล้ชิดซึ่งพัฒนาโดย บริษัท Acorn Computers สำหรับ ไมโครคอมพิวเตอร์ รุ่นแรกๆ เช่น Acorn...

ระบบ Acorn พื้นฐาน

ระบบ Acorn พื้นฐาน
นักพัฒนาคอมพิวเตอร์เอคอร์น
ปรากฏครั้งแรกพ.ศ. 2522 ( 1979 )
ใบอนุญาตกรรมสิทธิ์
ภาษาถิ่น
อะตอมเบสิก
ได้รับอิทธิพล
บีบีซี เบสิค

Acorn System BASICและAtom BASIC เป็น ภาษาโปรแกรม BASICสองรูปแบบที่เกี่ยวข้องกันอย่างใกล้ชิดซึ่งพัฒนาโดยบริษัท Acorn Computersสำหรับไมโครคอมพิวเตอร์ รุ่นแรกๆ เช่นAcorn System 3และAcorn Atomเนื่องจากพัฒนาขึ้นภายในบริษัทเอง ภาษาทั้งสองนี้จึงมีลักษณะเฉพาะหลายประการเมื่อเทียบกับภาษา BASIC ส่วนใหญ่ในยุค คอมพิวเตอร์ส่วนบุคคล

โดยเฉพาะอย่างยิ่ง ภาษาดังกล่าวขาดคำสั่งสำหรับฟังก์ชันภายในของเครื่องหลายอย่าง และใช้วิธีการเข้าถึงและจัดการตำแหน่งหน่วยความจำโดยตรงโดยใช้ตัวดำเนินการอ้างอิงแทนคำสั่งPEEK และ POKEทั้งสองภาษายังขาด การรองรับ เลขทศนิยมแม้ว่าจะสามารถเพิ่มได้ด้วยROM เสริม ซึ่งจะทำให้เกิดลักษณะเฉพาะตัวเพิ่มเติม ความแตกต่างหลักของ System BASIC และ Atom BASIC คือ Atom ใช้ระบบการอ้างอิงแบบเดียวกันในการจัดการสตริงขั้นพื้นฐาน ซึ่ง Standard ขาดไป และเพิ่มคำสั่งใหม่จำนวนเล็กน้อยสำหรับกราฟิก คอมพิวเตอร์

ความผิดปกติส่วนใหญ่เหล่านี้ถูกกำจัดออกไปเมื่อระบบพื้นฐานได้รับการขยายอย่างมากเพื่อสร้างBBC BASICบนเครื่องรุ่นต่อจาก Atom คือBBC Microต่อมามีการเสนอ ROM ของ BBC BASIC ให้กับผู้ใช้ Atom ด้วย

ประวัติศาสตร์

เฮอร์มันน์ เฮาเซอร์ใช้ภาษา Atom BASIC ในงานฉลองครบรอบ 30 ปีของ BBC Micro

บริษัท Acorn Computersก่อตั้งขึ้นในปี 1978 และเริ่มต้นจากการผลิตระบบแบบประกอบเองและ ระบบที่ใช้ Eurocardโดยเริ่มจากAcorn System 1ในปี 1979 พวกเขาพัฒนา Acorn System BASIC สำหรับเครื่องเหล่านี้[ 1 ]ซึ่งเป็นภาษาเฉพาะจำนวนเต็มที่ต้องการหน่วยความจำเพียง 4 KB เท่านั้น[ 2 ]ภาษานี้มีรายละเอียดการใช้งานหลายอย่างที่ทำให้มัน "ไม่เป็นมาตรฐานอย่างมาก" [ 3 ]

อะตอม ซึ่งเปิดตัวใน ปี 1980 สร้างขึ้นจากชิ้นส่วนของซิสเต็ม 3 ที่บรรจุลงบนแผงวงจรเดียว ระบบที่จัดส่งมาพร้อมกับ RAM 2 KB และ ROM 8 KB เป็นมาตรฐาน ซึ่งรวมถึง BASIC และไดรเวอร์อุปกรณ์ จำนวน หนึ่ง BASIC ของอะตอมมีการเปลี่ยนแปลงเพียงเล็กน้อยจากเวอร์ชันของซิสเต็ม โดยเพิ่มการรองรับการจัดการสตริงและคำสั่งกราฟิกจำนวนเล็กน้อย อะตอมสามารถอัปเกรดได้ โดยมี RAM รวมสูงสุด 12 KB และ ROM เพิ่มเติมอีก 4 KB ที่เพิ่ม การรองรับ จุดลอยตัวซึ่งใช้ฟังก์ชันและการดำเนินการแยกต่างหากที่ทำงานกับจุดลอยตัว โดยระบุด้วยสัญลักษณ์ % [ 3 ]การเลือกใช้สัญลักษณ์นี้เป็นเรื่องน่าเสียดาย เนื่องจากMicrosoft BASICใช้เครื่องหมายเปอร์เซ็นต์เพื่อระบุจำนวนเต็ม ไม่ใช่จุดลอยตัว[ 4 ]

คอมพิวเตอร์ Atom วางจำหน่ายในตลาดได้เพียงช่วงเวลาสั้นๆ ก่อนที่ Acorn จะเริ่มพัฒนาคอมพิวเตอร์รุ่นต่อมาคือ Proton ซึ่งเดิมทีตั้งใจให้เป็นหน่วยประมวลผลสองตัว การออกแบบยังอยู่ในช่วงเริ่มต้นเมื่อเหตุการณ์ต่างๆ นำไปสู่การเลือกใช้เป็นพื้นฐานของBBC Micro ซึ่งเป็น หน่วยประมวลผลเดี่ยว [ 1 ]ในขณะนั้น มีข้อคิดเห็นว่าไม่ควรใช้ภาษา BASIC ของ Acorn อย่างแน่นอน เพราะ "ไมโครคอมพิวเตอร์อื่นๆ แทบจะไม่สามารถเข้าใจได้" และ "หากภาษาใหม่นี้ใช้พื้นฐานจากภาษา BASIC ของ Atom มันจะเป็นหายนะ" [ 5 ]

ในที่สุด ระบบ BBC ก็ได้ใช้ BASIC เวอร์ชันเก่าที่เขียนด้วย Acorn แต่ได้รับการดัดแปลงอย่างมากBBC BASIC ที่ได้จึงมีความคล้ายคลึงกับ Microsoft BASICมากขึ้นและต่อมาได้นำเสนอเป็นตัวเลือกอัปเกรดสำหรับ Atom [ 6 ]

คำอธิบาย

เนื่องจากภาษาทั้งสองมีความคล้ายคลึงกันมาก ในส่วนต่อไปนี้จะอ้างอิงถึง Atom BASIC เป็นหลัก และจะชี้ให้เห็นถึงความแตกต่างในกรณีที่พบเท่านั้น

การแก้ไขโปรแกรม

เช่นเดียวกับภาษา BASIC ส่วนใหญ่ในยุคนั้น Atom BASIC ใช้ตัวแก้ไขแบบบรรทัดต่อบรรทัดที่มีโหมดโดยตรง (ทันที) และโหมดทางอ้อม การพิมพ์คำสั่งโดยไม่มีหมายเลขบรรทัดจะดำเนินการทันที การเพิ่มหมายเลขบรรทัดจะวางคำสั่งเหล่านั้นไว้ในโปรแกรมที่จัดเก็บไว้ ลักษณะเฉพาะอย่างหนึ่งคือ แม้ว่าจะอนุญาตให้มีคำสั่งหลายคำสั่งในบรรทัดเดียว แต่ตัวคั่นระหว่างคำสั่งคือเครื่องหมายเซมิโคลอน[ 7 ]แทนที่จะเป็นเครื่องหมายโคลอนที่ใช้กันทั่วไป ดังนั้นผู้ใช้จึงต้องแปลงอักขระนั้นเมื่อพิมพ์โปรแกรมสำหรับคอมพิวเตอร์เครื่องอื่น

Acorn BASIC ออกแบบมาเพื่อใช้กับเทอร์มินัลคอมพิวเตอร์จึงไม่รองรับโหมดการแก้ไขแบบเต็มหน้าจอ ในทางตรงกันข้าม ในCommodore BASIC (และภาษาไมโครคอมพิวเตอร์อื่นๆ อีกมากมาย) เราสามารถใช้ปุ่มลูกศรเพื่อเลื่อนขึ้นไปในรายการโปรแกรม ทำการเปลี่ยนแปลงบนหน้าจอ แล้วกดReturnเพื่อบันทึกการเปลี่ยนแปลงเหล่านั้น บน Atom ซึ่งมีจอแสดงผลแบบเต็มหน้าจอ เราสามารถเลื่อนขึ้นไปในรายการโดยใช้ปุ่มลูกศรได้แต่ในการแก้ไขข้อความนั้นจะต้องกดปุ่มเพื่อคัดลอกไปยังพื้นที่ป้อนข้อมูลซึ่งสามารถแก้ไขได้[ 8 ]Copy

ความแตกต่างอีกประการหนึ่งใน Atom คือปุ่ม ซึ่งทำการรีเซ็ตระบบ ซึ่งอาจล้างโปรแกรมออกจากหน่วยความจำ เพื่อรีเซ็ตหากกดปุ่มโดยไม่ได้ตั้งใจ Atom BASIC ได้เพิ่มคำสั่ง ซึ่งสามารถใช้เพื่อรีเซ็ตการกดปุ่มโดยไม่ได้ตั้งใจได้เช่นกันการเปลี่ยนแปลงเล็กน้อยกว่านั้นคือการใช้เครื่องหมายจุลภาคคั่นหมายเลขบรรทัดแทนที่จะใช้เครื่องหมายลบ ซึ่งจะพิมพ์บรรทัดที่ 20 ถึง 40 [ 9 ]BreakOLDNEWLISTLIST 20,40

ภาษานี้ยังสามารถใช้ป้ายกำกับบรรทัดแทนตัวเลขสำหรับการแยกสาขา ได้อีกด้วย ป้ายกำกับประกอบด้วยตัวอักษรพิมพ์เล็กตัวเดียวที่พิมพ์ต่อจากหมายเลขบรรทัดทันที ตัวอย่างเช่น: [ 10 ]

พิมพ์ 10 วินาที "*" 20 คำสั่ง GOTO 

ข้อดีของวิธีนี้คือที่อยู่หน่วยความจำของคำสั่งจะถูกเก็บไว้ใน s ซึ่งหมายความว่าสาขา GOTO สามารถย้ายไปยังบรรทัดนั้นได้โดยตรงโดยไม่ต้องค้นหาผ่านทุกบรรทัดในโปรแกรมเพื่อหาหมายเลขบรรทัดที่ตรงกัน[ 10 ] Acorn ยังอนุญาตให้ใช้นิพจน์ใดๆ เพื่อสร้างหมายเลขบรรทัดสำหรับเป้าหมายสาขาGOSUB 500+(A*10)เช่น[ 11 ]

แถลงการณ์

คำสั่งพื้นฐานของ Acorn คล้ายกับ BASIC อื่นๆ ในยุคนั้น และรองรับคำสั่งพื้นฐานส่วนใหญ่ เช่นCLEAR, DIM, END, FOR..TO..STEP..NEXT , GOSUB , GOTO , IF..THEN , INPUT, (ตัวเลือก) LET, LIST, LOAD, PRINT, REM , RETURN , RUN, SAVE, STOP [ 12 ] มีคำสั่งทั่วไปจำนวนหนึ่งที่ขาดหายไป โดยเฉพาะDATA, READ, RESTOREที่ใช้ในการจัดเก็บข้อมูลในโปรแกรม, ON..GOSUB, ON..GOTO สำหรับการแตก สาขาแบบคำนวณและDEF FNสำหรับฟังก์ชันที่ผู้ใช้กำหนด[ a ]

นอกจากพื้นฐานเหล่านี้แล้ว Acorn ยังเพิ่มDO..UNTILการสร้างลูปแบบทดสอบด้านล่างและแบบอิงนิพจน์ ลูป FOR ได้รับการปรับปรุงประสิทธิภาพอย่างมากโดยใช้การเปรียบเทียบโดยตรงระหว่างตัวแปรดัชนีกับค่าคงที่ซึ่งตั้งค่าเพียงครั้งเดียวเมื่อเข้าสู่ลูป การปรับปรุงประสิทธิภาพอีกอย่างคือการจัดเก็บที่อยู่ของลูป FOR ไม่ใช่หมายเลขบรรทัด ดังนั้นเมื่อพบคำสั่ง NEXT ที่ตรงกัน โปรแกรมสามารถย้อนกลับไปยังลูป FOR ได้ทันที แม้ว่า FOR จะเหมาะสมสำหรับลูปหลายประเภท แต่เมื่อต้องการการควบคุมที่มากขึ้น เช่น เมื่อเปรียบเทียบกับเกณฑ์ที่ซับซ้อนกว่า ในภาษาโปรแกรมส่วนใหญ่จะต้องใช้คำสั่ง IF:

500 A = A +1 510 REM คำสั่งเพิ่มเติมตรงนี้600 IF A > 10 AND B > 100 THEN 500

ข้อเสียของลูปแบบนี้คือ เงื่อนไขการแยกเงื่อนไขจำเป็นต้องค้นหาบรรทัดที่ 500 ในโปรแกรม ซึ่งโดยปกติแล้วในลูปจะเกิดขึ้นหลายครั้ง ในโปรแกรมขนาดใหญ่ วิธีนี้อาจทำให้เกิดภาระการทำงานที่มากเกินไป การใช้คำสั่ง DO แทนจะให้ประสิทธิภาพที่ดีกว่า

500 ทำA = A +1 510 REM คำสั่งเพิ่มเติมตรงนี้600 จนกว่าA > 10 และB > 100

ในกรณีนี้ เช่นเดียวกับลูป FOR ที่อยู่ของ DO จะถูกจัดเก็บเมื่อเข้าสู่ลูป ทำให้ UNTIL สามารถกลับไปยังด้านบนของลูปได้ทันทีโดยไม่ต้องสแกนผ่านโปรแกรม[ 14 ]โปรดสังเกตกรณีพิเศษที่ DO สามารถตามด้วยคำสั่งอื่นได้โดยตรงโดยไม่ต้องใช้ตัวคั่นเซมิโคลอน - ซึ่งA=A+1ไม่ใช่ส่วนหนึ่งของDOแต่เป็นคำสั่งแยกต่างหาก[ 15 ]

ในบรรดาส่วนเพิ่มเติมเล็กน้อยคือ คำสั่ง WAITซึ่งจะหยุดการทำงานชั่วคราวจนกว่าจะถึงรอบนาฬิกาถัดไป ทุกๆ1/60 วินาที คำ สั่งนี้ไม่ได้รอจนครบหนึ่งรอบนาฬิกา แต่รอจนถึง รอบนาฬิกา ถัดไปซึ่งอาจเกิดขึ้นทันที[ 14 ] LINKเรียกใช้รูทีนภาษาเครื่อง[ 16 ]ซึ่งเป็นสิ่งที่เทียบเท่ากับCALLหรือSYSในภาษาเครื่องส่วนใหญ่[ 17 ]

คณิตศาสตร์ ตัวดำเนินการ และฟังก์ชัน

Acorn ใช้ จำนวนเต็มแบบมีเครื่องหมาย 32 บิตสำหรับการคำนวณทางคณิตศาสตร์ทั้งหมด[ 18 ]โดยไม่มี การรองรับ จุดลอยตัว มาตรฐาน เพื่อจัดการกับการหารซึ่งมักจะคืนค่าส่วนที่เป็นเศษส่วน พวกเขาจึงเพิ่ม%ตัวดำเนินการเพื่อคืนค่าเศษเหลือ ตัวอย่างเช่นPRINT 7/3จะคืนค่า 2 ในขณะที่PRINT 7%3จะคืนค่า 1 [ 19 ]

ชื่อตัวแปรสามารถประกอบด้วยตัวอักษรเพียงตัวเดียว ตั้งแต่ A ถึง Z [ 20 ]การรวมกันของตัวอักษรสองตัวทั้งหมดถูกสงวนไว้เป็นอาร์เรย์ ดังนั้น E จึงเป็นค่าเดียว ในขณะที่ EE เป็นอาร์เรย์ อาร์เรย์ทั้งหมดต้องใช้คำสั่ง DIM [ 21 ]โดยไม่ได้กำหนดมิติเป็น 10 เหมือนกับMicrosoft BASICในระหว่างการทำงาน การตรวจสอบเพียงอย่างเดียวที่ดำเนินการกับอาร์เรย์คือดัชนีที่ส่งเข้ามาเป็นค่าบวก ดังนั้นจึงสามารถอ่านข้อมูลลงในหน่วยความจำได้โดยการส่งค่าที่มากกว่ามิติ[ 22 ]ไม่รองรับอาร์เรย์หลายมิติ[ 23 ]

การดำเนินการทางคณิตศาสตร์พื้นฐานประกอบด้วย+, -, *, /และ%นอกจากนี้ยังรองรับตัวดำเนินการตรรกะแบบบิตไวส์ โดยใช้&, \และ:สำหรับ AND, OR และ XOR ตามลำดับ ตัวดำเนินการเหล่านี้ทำการเปรียบเทียบ ดังนั้นจึงคืนค่าเป็น 0 การใช้เครื่องหมายโคลอนสำหรับ OR [ b ]เป็นเหตุผลที่ต้องใช้เครื่องหมายเซมิโคลอนเป็น ตัวคั่นคำสั่ง [ 24 ]โปรดทราบว่าสิ่งเหล่านี้แยกออกจากการเชื่อมต่อเชิงตรรกะที่พบในคำสั่ง IF เช่นซึ่งได้รับการสนับสนุนเช่นกัน[ 25 ]1 & 0IFA=1ANDB=0THEN...

มีฟังก์ชันทางคณิตศาสตร์เพียงสองฟังก์ชัน คือABSและRND ABS ทำงานเหมือนในภาษา BASIC อื่นๆ โดยส่งค่าสัมบูรณ์ของอินพุตที่กำหนด RND ทำงานแตกต่างจากภาษาอื่นๆ ส่วนใหญ่ โดยจะส่งค่าระหว่างค่าจำนวนเต็มบวกและลบสูงสุด ในการใช้รูปแบบทั่วไปเพื่อส่งค่าระหว่าง 0 และค่าบวกที่กำหนด เช่น ระหว่าง 0 และ 10 จะใช้[ 26 ]ABS(RND)%11

เวกเตอร์

ภาษา BASIC ส่วนใหญ่ในยุคนั้นใช้PEEK และ POKEเพื่อเข้าถึงฟังก์ชันเฉพาะของเครื่องที่ไม่ได้สร้างไว้ในตัวภาษาเอง Acorn ไม่มี PEEK และ POKE และใช้ตัวดำเนินการใหม่เพื่อให้ฟังก์ชันนี้ในระบบที่ใช้งานง่ายกว่า ตัวดำเนินการคือ?และ!โดยตัวแรกใช้สำหรับตั้งค่าหรือส่งคืนไบต์ที่ตำแหน่งที่กำหนด และตัวหลังใช้สำหรับตั้งค่าหรือส่งคืน "เวิร์ด" 4 ไบต์[ 27 ]ตัวอย่างเช่น ตัวอย่างทั่วไปของ PEEK ในภาษาถิ่นส่วนใหญ่ เช่นสามารถทำได้ด้วย[ 28 ] ภาษาถิ่นส่วนใหญ่ไม่มีสิ่งที่เทียบเท่ากับ ! [ c ]ยิ่งไปกว่านั้น ไวยากรณ์เดียวกันนี้สามารถใช้เพื่อตั้งค่าในหน่วยความจำได้ เช่นPOKE [ 28 ]PRINTPEEK(4000)PRINT ?4000?4000=200

เพื่อช่วยในการเข้าถึงข้อมูลที่จัดเรียงในรูปแบบต่อเนื่องในหน่วยความจำ เช่น อาร์เรย์ของตัวเลข ตัวดำเนินการสามารถนำไปใช้กับด้านขวาของตัวแปรได้ เมื่อใช้ในลักษณะนี้ เช่นA?ระบบจะเข้าถึงหน่วยความจำที่ตำแหน่งของตัวแปรในหน่วยความจำ ตัวเลขใดๆ ที่ตามหลังตัวดำเนินการจะถูกนำมาใช้เป็นค่าชดเชย ดังนั้น ตัวอย่างเช่นA?100จะส่งคืนค่าของไบต์ที่ 100 ตำแหน่งถัดจากตำแหน่งของ A ในหน่วยความจำ[ 28 ]

สิ่งนี้มักใช้ร่วมกับแนวคิดเฉพาะของ Acorn อีกอย่างหนึ่งคือ "เวกเตอร์" ที่น่าสับสนคือ เวกเตอร์เหล่านี้ถูกสร้างขึ้นโดยใช้คำสั่ง DIM เดียวกันกับอาร์เรย์ แต่ใช้กับตัวแปรตัวอักษรเดียว เมื่อพบคำสั่ง DIM ระบบจะจัดสรรตำแหน่งจำนวนนั้นไว้ที่ด้านบนของหน่วยความจำ จากนั้นจึงเลื่อนตัวชี้หน่วยความจำขึ้น ซึ่งจะทำให้เหลือบล็อกของหน่วยความจำที่สามารถเข้าถึงได้ด้วยตัวดำเนินการอ้างอิงทางอ้อม ตัวอย่างเช่น: [ 28 ]

10 DIM A ( 100 ) 20 PRINT A ? 10

ซึ่งจะพิมพ์ค่าไบต์ที่ตำแหน่งที่ 11 ใน A (การเข้าถึงทั้งหมดเริ่มต้นที่ดัชนีศูนย์) [ 28 ]ในทำนองเดียวกัน เราสามารถจัดเก็บค่าในหน่วยความจำโดยใช้ตัวดำเนินการเดียวกันที่ใช้ก่อนชื่อตัวแปรได้:

!A=123456 

การดำเนินการนี้จะแปลงค่าทศนิยม 123456 จาก ASCII เป็นจำนวนเต็มและจัดเก็บไว้ในตำแหน่งหน่วยความจำโดยเริ่มจากตำแหน่งฐานสำหรับ A [ 27 ]

เพื่อช่วยในการทำงานกับเวกเตอร์ Acorn ได้เพิ่มตัวแปรเสมือนTOPเมื่อระบบเริ่มต้นทำงานครั้งแรก ตัวแปรนี้จะชี้ไปยังตำแหน่งแรกหลังจากสิ้นสุดโปรแกรม จากนั้น DIM ใดๆ จะถูกสร้างขึ้นที่ค่าปัจจุบันของ TOP และ TOP จะได้รับการอัปเดตไปยังจุดสิ้นสุดของวัตถุใหม่ สามารถสร้างเวกเตอร์แบบไดนามิกได้โดยการจัดการ TOP โดยตรง[ 30 ]

สตริง

Atom BASIC เพิ่มการรองรับสตริง แต่ไม่รองรับตัวแปรสตริงและไม่มีแนวคิดของสตริงเป็นประเภทอะตอมิก แต่ใช้ระบบเวกเตอร์ในการจัดการข้อมูลสตริงในหน่วยความจำในรูปแบบค่าASCII [ 28 ]เพื่อช่วยในการใช้งานนี้$ตัวดำเนินการจะแปลงค่าในหน่วยความจำเป็นค่า ASCII ตัวดำเนินการนี้จะอ่านข้อมูลจากหน่วยความจำต่อไปจนกว่าจะพบคำสั่ง return และเมื่อเขียนข้อมูลลงในหน่วยความจำ จะเพิ่มคำสั่ง return ไว้ที่ท้ายเสมอ[ 31 ]ดังนั้น ในขณะที่PRINT ?Aจะพิมพ์ค่าเดียวของไบต์ที่ตำแหน่งของ A ในหน่วยความจำเป็นตัวเลขPRINT $Aจะอ่านค่าเริ่มต้นที่ตำแหน่งนั้นและพิมพ์ออกมาเป็นสตริง[ 31 ]ตัวอย่างเช่น:

10 DIM A ( 12 ) 20 $ A = "HELLO, WORLD" 30 PRINT $ A

โค้ดนี้อาจดูคล้ายกับการใช้สตริงในภาษาถิ่นอื่นๆ มาก แม้ว่าตำแหน่งของ $ เมื่อเทียบกับชื่อตัวแปรจะเปลี่ยนไปก็ตาม โดยเฉพาะอย่างยิ่งจะคล้ายกับภาษาถิ่นที่ต้องใช้ DIM กับสตริงทั้งหมด เช่นHP Time-Shared BASICหรือAtari BASICแต่การทำงานภายในนั้นแตกต่างกันมาก ในภาษาถิ่นเหล่านั้น A และ A$ เป็นตัวแปรสองตัวที่แตกต่างกัน และ $ เป็นส่วนหนึ่งของชื่อตัวแปร ใน Acorn, A และ $A เป็นตัวแปรเดียวกัน และ $ ทำหน้าที่ดำเนินการแบบเอกภาคกับตัวแปรนั้น นอกจากนี้ยังหมายความว่าเราสามารถใช้อาร์เรย์สำหรับสตริงได้ เช่น$AA(10)ซึ่งแปลงค่าใน AA(10) เป็นสตริง[ 3 ]

แนวคิดนี้อนุญาตให้เข้าถึงอักขระแต่ละตัวโดยใช้สัญกรณ์เวกเตอร์ ตัวอย่างเช่นA?5จะส่งคืนค่า ASCII ของอักขระตัวที่ 5 ซึ่งในกรณีนี้คือ 79 สำหรับ O ในขณะที่PRINT $A?5จะแสดงผล "O" [ 32 ]ไม่มีวิธีใดที่จะแยกสตริงย่อยออกมาในการดำเนินการเดียว ต้องวนลูปผ่านอักขระและย้ายทีละตัว การต่อสตริงสามารถทำได้โดยการกำหนดตัวแปรหนึ่งให้กับส่วนท้ายของอีกตัวแปรหนึ่ง ตัวอย่างเช่น$A+LEN(A)=$Bคัดลอกสตริง B ไปยังส่วนท้ายของ A [ 33 ]

ภาษานี้มีฟังก์ชันสตริงเพียงสองฟังก์ชันเท่านั้นLENซึ่งฟังก์ชันแรกจะค้นหาอักขระขึ้นบรรทัดใหม่ที่อยู่ท้ายสุดและส่งคืนค่าความยาว และฟังก์ชันที่สองCHจะส่งคืนค่า ASCII ของอักขระ CH มีรูปแบบที่แปลกประหลาดโดยไม่มีวงเล็บ ดังนั้นจึงCH"A"จะส่งคืนค่า 65 [ 32 ]มิฉะนั้นจะคล้ายกับรูปแบบที่พบได้ทั่วไปASCในภาษาถิ่นอื่นๆ[ 34 ]

ตัวดำเนินการใหม่ตัวอื่นคือ#ซึ่งแปลงค่าตัวเลขเป็น สตริง เลขฐานสิบหกเช่นเดียวกับ $ สามารถใช้ได้ทุกที่เพื่อทำการแปลง ตัวอย่างเช่นA=#4000กำหนดค่าของ A เป็นค่าทศนิยม 16384 ซึ่งเป็นตำแหน่งของหน่วยความจำหน้าจอ มักจะใช้ร่วมกับตัวดำเนินการ $ เพื่อให้สตริงสามารถมีอักขระที่ไม่สามารถพิมพ์ได้ เช่น อักขระ "เคอร์เซอร์ขึ้น" [ 8 ]

จุดลอยตัว

สามารถเพิ่มการรองรับจุดลอยตัวได้ด้วยการขยาย ROM เพิ่มเติม 4 KB ซึ่งใช้ขนาดคำ 40 บิตที่ขยายแล้ว แมนทิสซาแบบมีเครื่องหมาย 32 บิต ตามด้วยเลขชี้กำลัง 8 บิต[ 35 ]ซึ่งหมายความว่าระบบจำเป็นต้องมีวิธีแยกแยะข้อมูลเมื่ออ่านและเขียนจากหน่วยความจำ ซึ่งจัดการในลักษณะที่คล้ายกับตัวดำเนินการสตริง โดยใช้%คำนำหน้า: [ 35 ]

%A=123.45 

เนื่องจากโค้ดถูกบรรจุอยู่ใน ROM ขนาด 4 KB แยกต่างหาก จึงไม่ได้แก้ไขคำสั่งที่มีอยู่ เช่น PRINT แต่กลับมีการแนะนำชุดคำสั่งใหม่ทั้งหมด รวมถึงFDIM, FIF, FINPUT, FPRINT, FUNITLซึ่งหมายความว่า ตัวอย่างเช่นหากค่าเป็นเลขทศนิยม จะไม่สามารถแปลงเป็นจำนวนเต็มได้ แต่ต้องใช้แทนสามารถแปลงค่าจำนวนเต็มเป็นเลขทศนิยมได้โดยใช้และแปลงเลขทศนิยมเป็นจำนวนเต็มได้โดยใช้ตัวดำเนินการเลขทศนิยม % [ 27 ]IF A=BFIF A=BFLT

ROM ยังรวมถึงฟังก์ชันทางคณิตศาสตร์ที่หลากหลายมากขึ้น รวมถึงABS, ACS, ASN, ATN, COS, DEG, EXP, FLT, HTN, LOG, PI, RAD, SGN, SIN, SQR, STR, TAN, VAL [ 36 ] แปลงตัวเลขทศนิยมเป็นสตริง เช่นเดียวกับในภาษาถิ่นอื่นๆ แต่ในกรณีนี้ สตริงจะถูกเขียนลงในหน่วยความจำ และฟังก์ชันจะส่งคืนที่อยู่ซึ่งสตริงนั้นถูกจัดเก็บไว้ เนื่องจากสตริงต้องการพื้นที่จัดเก็บที่ยาวพอที่จะเก็บไว้ จึงมักทำได้โดยใช้ TOP ตัวอย่างเช่น: STRSTR$

สตร.พีไอ, ท็อป พิมพ์ด้านบน TOP=TOP-LEN(TOP) 

การดำเนินการนี้จะแปลงค่าของตัวแปรเสมือน PI เป็นสตริงที่เริ่มต้นที่ตำแหน่งหน่วยความจำ TOP พิมพ์สตริงโดยใช้ $TOP จากนั้นจึงละทิ้งหน่วยความจำนั้น[ 37 ]

อินพุต/เอาต์พุต

ฟังก์ชัน PRINTและINPUTส่วนใหญ่ทำงานเหมือนในภาษาถิ่นอื่นๆ ความผิดปกติอย่างหนึ่งเกิดขึ้นเนื่องจากเครื่องหมายโคลอนและเซมิโคลอนถูกใช้เพื่อวัตถุประสงค์อื่นอยู่แล้ว ทำให้เหลือเพียงเครื่องหมายจุลภาคสำหรับแยกฟิลด์ ในการพิมพ์ค่าโดยไม่มีช่องว่างระหว่างกัน ค่าต่างๆ จะถูกแสดงรายการโดยมีอักขระช่องว่างคั่นระหว่างกัน เช่น ซึ่งเป็นรูปแบบที่อนุญาตในภาษาถิ่นอื่นๆ อีกหลายภาษาแม้ว่าจะไม่ค่อยได้ใช้ก็ตาม การทำเช่นนี้เพียงอย่างเดียวจะไม่ทำให้ตัวเลขถูกพิมพ์ในรูปแบบกระชับ เนื่องจากโดยปกติแล้วจะพิมพ์โดยมีช่องว่างทางด้านขวาเพื่อให้แต่ละตัวเลขมีความกว้าง 8 ตัวอักษร สามารถปรับได้โดยการเปลี่ยนค่าในตัวแปรเสมือน[ 38 ]ขึ้นบรรทัดใหม่จะถูกพิมพ์ด้วยเครื่องหมายอัญประกาศเดี่ยว[ 27 ] COUNTจะส่งคืนคอลัมน์เคอร์เซอร์ คล้ายกับPOSในภาษาถิ่นส่วนใหญ่[ 39 ]PRINT A B C@PRINT"HELLO"'"WORLD"

อุปกรณ์จัดเก็บข้อมูลเริ่มต้นสำหรับ Atom คือ ระบบ เทปคาสเซ็ตขนาดกะทัดรัดแต่ละไฟล์จะถูกจัดเก็บเป็นชุดของบล็อก โดยแต่ละบล็อกจะมีส่วนหัวที่มีชื่อไฟล์[ 40 ]ไฟล์ที่บันทึกไว้SAVE THISFILEสามารถอ่านกลับเข้ามาได้ด้วยLOAD THISFILEในขณะที่*CATจะแสดงรายชื่อไฟล์บนเทปคาสเซ็ตขณะที่อ่านผ่านส่วนหัว[ 41 ]

สามารถเปิดข้อมูลตามอำเภอใจเพื่ออ่านโดยใช้FINหรือเขียนด้วยFOUTซึ่งทั้งสองคำสั่งจะส่งคืนแฮนเดิลไฟล์ที่เป็นตัวเลข ไฟล์จะถูกปิดด้วยSHUTข้อมูลจะถูกอ่านหรือเขียนในรูปแบบตัวเลขโดยใช้GET, PUTในรูปแบบไบต์เดียวโดยใช้BGET, BPUTและในรูปแบบสตริงโดยใช้SGET, SPUT EXT จะส่งคืน ความยาวของไฟล์ ในขณะที่PTRจะส่งคืนหรือตั้งค่าตัวชี้ปัจจุบันในไฟล์[ 16 ]จำนวนไบต์ที่อ่านหรือเขียนไปแล้ว[ 42 ]หากมี ROM จุดลอยตัวอยู่ ก็จะเพิ่มFGET, FPUTเข้าไป ด้วย [ 36 ]

ตัวอย่างเช่น:

A = FOUT "AFILE" DO BPUT A , 88 ; WAIT ; WAIT ; WAIT ; WAIT ; UNTIL 0

จะใช้BPUTเพื่อเขียนชุดไบต์ 88 ไบต์ จนกว่าผู้ใช้จะกดเพื่อหยุดโปรแกรม จากนั้นสามารถอ่านกลับเข้ามาได้ (หลังจากกรอเทปกลับด้วยตนเอง) โดยใช้: [ 43 ]Escape

A = FIN "AFILE" DO PRINT $ BGET A ; UNTIL 0

เครื่องหมายดอลลาร์บอกระบบให้แปลงข้อมูลไบนารีที่เข้ามาเป็นรูปแบบสตริง ดังนั้นในกรณีนี้ ผลลัพธ์จะเป็นชุดของตัว X ไม่ใช่ 88 [ 43 ]อาจดูเหมือนว่า สามารถใช้ SGETแทนBGETได้ แต่จะพยายามอ่านจากไฟล์ต่อไปจนกว่าจะพบอักขระขึ้นบรรทัดใหม่ ซึ่งในตัวอย่างนี้ไม่ได้ถูกเขียนไว้[ 44 ]

การสนับสนุนกราฟิก

Atom มีกราฟิกบิตแมป แบบพื้นฐาน และ Atom BASIC ได้เพิ่มคำสั่งจำนวนหนึ่งเพื่อรองรับกราฟิกดังกล่าว เช่นCLEARการล้างหน้าจอMOVEการย้ายเคอร์เซอร์กราฟิกไปยังตำแหน่ง X,Y ที่กำหนด และDRAWการวาดเส้นจากตำแหน่งปัจจุบันไปยังตำแหน่ง X,Y ที่กำหนด[ 45 ]

ROM จุดลอยตัวยังรวมถึงการสนับสนุนกราฟิกสีด้วยการเพิ่มCOLOURคำสั่ง การเรียก COLOUR ด้วยพารามิเตอร์ 0 ถึง 3 จะตั้งค่าเอาต์พุตถัดไปเป็นสีนั้น บนจอแสดงผลขาวดำ สีจะแสดงเป็นเฉดสีเทา[ 46 ]

หมายเหตุ

  1. ^แหล่งข้อมูลที่ดีสำหรับสิ่งที่ถือว่าเป็นมาตรฐานสำหรับ BASIC ในยุคไมโครคอมพิวเตอร์คือบทนำของ BASIC Computer Gamesซึ่งแนะนำคำสั่งที่ใช้และพูดถึงข้อยกเว้นของ "BASIC ปกติ" [ 13 ]
  2. ^น่าจะเป็นเพราะมันดูเหมือนเส้นแนวตั้ง ซึ่งเป็นรูปแบบที่ใช้ในตำราคณิตศาสตร์ส่วนใหญ่สำหรับ OR (การวิเคราะห์เชิงตรรกะ)
  3. ^ภาษาถิ่นขั้นสูงต่างๆ เช่น Turbo-BASIC XLมีคำสั่งต่างๆ เช่นDPEEKสำหรับ "double peek" ซึ่งส่งค่า 16 บิตกลับมา คำสั่งเหล่านี้มีแนวคิดคล้ายกับ ! [ 29 ]
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Acorn_System_BASIC&oldid=1347352608 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ระบบ Acorn พื้นฐาน

Acorn System BASIC และ Atom BASIC เป็น ภาษาโปรแกรม BASIC สองรูปแบบที่เกี่ยวข้องกันอย่างใกล้ชิดซึ่งพัฒนาโดย บริษัท Acorn Computers สำหรับ ไมโครคอมพิวเตอร์ รุ่นแรกๆ เช่น Acorn...

ประวัติศาสตร์

บริษัท Acorn Computers ก่อตั้งขึ้นในปี 1978 และเริ่มต้นจากการผลิตระบบแบบประกอบเองและ ระบบที่ใช้ Eurocard โดยเริ่มจาก Acorn System 1 ในปี 1979 พวกเขาพัฒนา Acorn System BASIC สำหรับเครื่องเหล่านี้ [ 1 ] ซึ่งเป็นภาษาเฉพาะจำนวนเต็มที่ต้องการหน่วยความจำเพียง 4 KB...

คำอธิบาย

เนื่องจากภาษาทั้งสองมีความคล้ายคลึงกันมาก ในส่วนต่อไปนี้จะอ้างอิงถึง Atom BASIC เป็นหลัก และจะชี้ให้เห็นถึงความแตกต่างในกรณีที่พบเท่านั้น

การแก้ไขโปรแกรม

เช่นเดียวกับภาษา BASIC ส่วนใหญ่ในยุคนั้น Atom BASIC ใช้ตัวแก้ไขแบบบรรทัดต่อบรรทัดที่มีโหมดโดยตรง (ทันที) และโหมดทางอ้อม การพิมพ์คำสั่งโดยไม่มีหมายเลขบรรทัดจะดำเนินการทันที การเพิ่มหมายเลขบรรทัดจะวางคำสั่งเหล่านั้นไว้ในโปรแกรมที่จัดเก็บไว้...