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

อ่าน 13 นาที

อาตาริ บาซิก

Atari BASIC คือ ตัวแปล ภาษา โปรแกรม BASIC ที่มาพร้อมกับ คอมพิวเตอร์ Atari 8 บิต แตกต่างจาก BASIC ส่วนใหญ่ในยุคคอมพิวเตอร์บ้านของอเมริกา Atari BASIC ไม่ได้ดัดแปลงมาจาก Microsoft...

อาตาริ บาซิก

อาตาริ บาซิก
โปรแกรมพร้อมใช้งาน
ตระกูลพื้นฐาน
ออกแบบโดยพอล ลอตัน แคธลีน โอ'ไบรอัน แครอล ชอว์ (คู่มือ) คีธ บรูว์สเตอร์ (คู่มือ)
นักพัฒนาเชพาร์ดสัน ไมโครซิสเต็มส์
ปรากฏครั้งแรกพ.ศ. 2522 ( 1979 )
เวอร์ชันเสถียร
ฉบับแก้ไข C / 1983 ( 1983 )
แพลตฟอร์มคอมพิวเตอร์ Atari 8 บิต
ใบอนุญาตซอฟต์แวร์กรรมสิทธิ์เชิงพาณิชย์
ได้รับอิทธิพลจาก
ข้อมูลทั่วไปทางธุรกิจพื้นฐาน[ 1 ]
ได้รับอิทธิพล
เบสิก เอ+ , เบสิก เอ็กซ์แอล , เบสิก เอ็กซ์อี , เทอร์โบ-เบสิก เอ็กซ์แอล

Atari BASICคือตัวแปลภาษา โปรแกรม BASICที่มาพร้อมกับคอมพิวเตอร์ Atari 8 บิตแตกต่างจาก BASIC ส่วนใหญ่ในยุคคอมพิวเตอร์บ้านของอเมริกา Atari BASIC ไม่ได้ดัดแปลงมาจากMicrosoft BASICและมีความแตกต่างกันในหลายด้าน โดยมีคีย์เวิร์ดสำหรับคุณสมบัติเฉพาะของ Atari และไม่มีการรองรับอาร์เรย์สตริง

ภาษาโปรแกรมนี้ถูกแจกจ่ายในรูป  แบบตลับ ROM ขนาด 8 KB สำหรับใช้กับคอมพิวเตอร์ Atari 400 และ 800 ในปี 1979 เริ่มตั้งแต่รุ่น 600XL และ 800XL ในปี 1983 เป็นต้นมา ภาษา BASIC ได้ถูกติดตั้งมาในระบบ ซอฟต์แวร์มีสามเวอร์ชัน ได้แก่ เวอร์ชัน "A" ดั้งเดิมที่อยู่ในตลับ เวอร์ชัน "B" ที่ติดตั้งมาในระบบของ 600XL/800XL และเวอร์ชัน "C" สุดท้ายในรุ่น XL รุ่นหลังๆ และซีรี่ส์ XE ความแตกต่างระหว่างทั้งสามเวอร์ชันอยู่ที่ความเสถียร โดยเวอร์ชัน "C" ได้แก้ไขข้อบกพร่องของสองเวอร์ชันก่อนหน้าแล้ว

แม้ว่าคอมพิวเตอร์ 8 บิตของ Atari จะทำงานได้เร็วขึ้นกว่าคอมพิวเตอร์รุ่นเดียวกันส่วนใหญ่ แต่การตัดสินใจทางเทคนิคหลายประการทำให้ Atari BASIC มีประสิทธิภาพอยู่ในระดับต่ำในการทดสอบมาตรฐาน

การพัฒนา

เครื่องที่ต่อมากลายเป็นคอมพิวเตอร์ Atari 8 บิตนั้น เดิมทีได้รับการพัฒนาเป็น เครื่องเล่นเกมคอนโซลรุ่นที่สองเพื่อทดแทนAtari VCS Ray Kassarประธานคนใหม่ของ Atari ตัดสินใจที่จะท้าทายApple Computerโดยการสร้างคอมพิวเตอร์สำหรับใช้ในบ้านแทน[ 2 ]

นั่นหมายความว่าการออกแบบจำเป็นต้องรวม ภาษาการเขียนโปรแกรม BASICซึ่งเป็นมาตรฐานสำหรับคอมพิวเตอร์ส่วนบุคคล ในช่วงต้นปี 1978 Atari ได้รับอนุญาตให้ใช้ซอร์สโค้ดของMicrosoft BASICเวอร์ชันMOS 6502 [ 3 ]โดยมีให้เลือกสองเวอร์ชัน คือ เวอร์ชันหนึ่งใช้รูปแบบจุดลอยตัว 32 บิต ซึ่งมีขนาดประมาณ 7800 ไบต์เมื่อประกอบเสร็จ และอีกเวอร์ชันหนึ่งใช้รูปแบบ 40 บิตแบบขยาย ซึ่งมีขนาดเกือบ 9 KB [ 4 ]

แม้แต่เวอร์ชัน 32 บิตก็แทบจะไม่พอดีกับขนาด 8 KB ของรูปแบบ ตลับ ROMของเครื่องAtari ยังรู้สึกว่าพวกเขาจำเป็นต้องขยายภาษาเพื่อรองรับคุณสมบัติฮาร์ดแวร์ของคอมพิวเตอร์ของพวกเขา คล้ายกับสิ่งที่ Apple เคยทำกับApplesoft BASICซึ่งทำให้ขนาดของเวอร์ชันของ Atari เพิ่มขึ้นเป็นประมาณ 11 KB; Applesoft BASIC บนApple II+มีความยาว 10,240 ไบต์[ a ] ​​หลังจากหกเดือน โค้ดก็ถูกปรับลดลงจนเกือบจะพอดีกับ ROM ขนาด 8 KB [ 3 ]แต่ Atari มีกำหนดส่งงานในเดือนมกราคม 1979 สำหรับงาน Consumer Electronics Show (CES) ซึ่งจะมีการสาธิตเครื่อง พวกเขาจึงตัดสินใจขอความช่วยเหลือเพื่อให้เวอร์ชันของ BASIC พร้อมใช้งานทันเวลาสำหรับงานแสดง[ 3 ]

เชพาร์ดสัน ไมโครซิสเต็มส์

ตลับเกม Atari BASIC 8K

ในเดือนกันยายน พ.ศ. 2521 Shepardson Microsystemsชนะการประมูลเพื่อพัฒนา BASIC ให้เสร็จสมบูรณ์[ 3 ]ในขณะนั้น พวกเขากำลังพัฒนา Cromemco 16K Structured BASIC สำหรับเครื่องCromemco S-100 ที่ใช้บัสZ80ให้เสร็จสมบูรณ์[ 5 ] [ 6 ]นักพัฒนา Kathleen O'Brien และ Paul Laughton ใช้Data General Business Basicซึ่งเป็นการใช้งานเฉพาะจำนวนเต็ม เป็นแรงบันดาลใจในการพัฒนา BASIC ของพวกเขา เนื่องจาก Laughton มีประสบการณ์กับ Data General ในระบบแบ่งเวลา[ 1 ]

Cromemco BASIC มี การใช้งาน จุดลอยตัว แบบขยายโดยใช้รูปแบบ เลขฐานสองแบบเข้ารหัสทศนิยม (BCD) 14 หลัก ซึ่งเป็นไปได้โดยใช้รีจิสเตอร์ทั้ง 16 ตัวของโปรเซสเซอร์ Zilog Z80เนื่องจากมีการแปลงข้อมูลทั้งหมดเป็นรูปแบบภายในในเวลาแก้ไข ค่าคงที่ขนาดเล็ก เช่น "1" จึงใช้หน่วยความจำประมาณ 8 ไบต์ และนี่อาจเป็นปัญหาโดยเฉพาะอย่างยิ่งเมื่อจัดเก็บอาร์เรย์ของตัวเลข เพื่อแก้ไขปัญหานี้ ภาษายังรองรับรูปแบบ BCD 6 หลักที่เล็กกว่าด้วย[ 7 ]

แม้แต่ BASIC ที่เล็กที่สุดบน 6502 ก็ใช้พื้นที่ประมาณ 10K ตัวอย่างเช่นCommodore BASICใช้พื้นที่ 9K แต่ยังต้องอาศัยการสนับสนุนจากKERNALด้วย[ b ]ในขณะที่Applesoft BASICมีขนาด 10,780 ไบต์[ c ]เพื่อให้บรรลุเป้าหมายในการติดตั้งใน ROM ขนาด 8K BASIC ใหม่จะต้องแบ่งออกเป็นสองส่วน คือ ตัวภาษาเองบนตลับเกม และไลบรารีจุดลอยตัวขนาด 2K ใน ROM ขนาด 10K ของระบบที่รองรับเฉพาะรูปแบบ 6 หลักเท่านั้น[ 10 ]

Atari ยอมรับข้อเสนอ และเมื่อข้อกำหนดได้รับการสรุปในเดือนตุลาคม พ.ศ. 2521 Laughton และ O'Brien ก็เริ่มทำงานกับภาษาใหม่[ 3 ]สัญญาระบุวันส่งมอบในหรือก่อนวันที่ 6 เมษายน พ.ศ. 2522 และยังรวมถึงระบบจัดการไฟล์ (ต่อมาเรียกว่า DOS 1.0) [ 10 ]แผนของ Atari คือการนำ Microsoft BASIC เวอร์ชัน 8K ในช่วงแรกไปที่งาน CES ปี พ.ศ. 2522 จากนั้นจึงเปลี่ยนไปใช้ Atari BASIC สำหรับการผลิต การพัฒนาเป็นไปอย่างรวดเร็ว โดยได้รับความช่วยเหลือจากข้อกำหนดโบนัสในสัญญา ซึ่งทำให้เวอร์ชันเริ่มต้นถูกส่งมอบในเดือนตุลาคม Atari นำเวอร์ชันตลับ 8K ไปที่งาน CES แทนของ Microsoft [ 11 ] ต่อมา Atari Microsoft BASICเป็นผลิตภัณฑ์แยกต่างหาก[ 12 ]

การเผยแพร่

เวอร์ชันที่เชพาร์ดสันมอบให้กับอาตาริสำหรับการสาธิตในงาน CES ไม่ได้ตั้งใจให้เป็นเวอร์ชันสุดท้าย และเชพาร์ดสันยังคงแก้ไขข้อบกพร่องต่อไป[ 11 ]โดยที่เชพาร์ดสันไม่รู้ อาตาริได้ส่งเวอร์ชัน CES ไปยังฝ่ายผลิตแล้ว[ 13 ]เวอร์ชันนี้เรียกว่าRevision Aซึ่งมีข้อบกพร่องสำคัญในรูทีนที่คัดลอกหน่วยความจำ: การลบโค้ดที่มีความยาว 256 ไบต์พอดีจะทำให้เครื่องค้างหลังจากป้อนคำสั่งถัดไป คีย์Resetไม่สามารถแก้ไขปัญหานี้ได้[ 14 ]

ภาษานี้ถูกแจกจ่ายในรูปแบบตลับขนาด 8  KBสำหรับใช้กับคอมพิวเตอร์ Atari 400 และ 800 ในปี 1979 และรวมถึงคู่มืออ้างอิง Atari BASICที่เขียนโดยCarol Shawและ Keith Brewster [ 15 ] [ 16 ] [ 17 ]

การแก้ไข Bพยายามแก้ไขข้อบกพร่องที่สำคัญในการแก้ไข A และวางจำหน่ายในปี 1983 ในรูปแบบ ROM ในตัวสำหรับรุ่น 600XL และ 800XL ในระหว่างการแก้ไขข้อผิดพลาดในการคัดลอกหน่วยความจำ โปรแกรมเมอร์สังเกตเห็นรูปแบบโค้ดเดียวกันในส่วนสำหรับการแทรกบรรทัด และใช้การแก้ไขแบบเดียวกัน ซึ่งกลับทำให้เกิดข้อบกพร่องเดิมขึ้นในโค้ดนี้ การแทรกบรรทัดใหม่นั้นพบได้บ่อยกว่าการลบบรรทัดเก่า ดังนั้นการเปลี่ยนแปลงนี้จึงทำให้จำนวนการขัดข้องเพิ่มขึ้นอย่างมาก[ 14 ]การแก้ไข B ยังเพิ่ม 16 ไบต์ให้กับโปรแกรมทุกครั้งที่มีการ เรียกใช้ SAVEd และLOADed ซึ่งในที่สุดจะทำให้เครื่องหมดหน่วยความจำแม้แต่กับโปรแกรมขนาดเล็กที่สุด[ 18 ] [ 19 ] Mapping the Atariอธิบายสิ่งเหล่านี้ว่าเป็น "ข้อบกพร่องที่ยอดเยี่ยม" และแนะนำเจ้าของเวอร์ชัน B ว่า "อย่าเล่นตลกเลย ไปเอา ROM ใหม่ซึ่งมีให้ในรูปแบบตลับ" จาก Atari [ 19 ]หนังสือเล่มนี้มีโปรแกรมแบบพิมพ์เพื่อแก้ไขเวอร์ชัน B เป็นเวอร์ชัน C สำหรับผู้ที่ไม่มีตลับ[ 20 ]

การแก้ไข Cช่วยขจัดปัญหาหน่วยความจำรั่วไหลในการแก้ไข B [ 19 ]มันถูกติดตั้งในเวอร์ชันต่อมาของ 800XL [ 18 ]และรุ่น XE ทั้งหมดรวมถึง XEGS การแก้ไข C ยังมีให้ใช้งานในรูปแบบตลับอีกด้วย[ 19 ]

สามารถตรวจสอบเวอร์ชันได้โดยพิมพ์ที่พรอมต์ READY ผลลัพธ์ที่ได้คือสำหรับการแก้ไข A สำหรับการแก้ไข B และสำหรับการแก้ไข C [ 21 ]PRINTPEEK(43234)16296234

ซอร์สโค้ด และข้อกำหนดการออกแบบ ที่สมบูรณ์พร้อมคำอธิบายประกอบของ Atari BASIC ได้รับการเผยแพร่ในชื่อThe Atari BASIC Source Bookในปี 1983 [ 22 ]

คำอธิบาย

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

ระบบจะแจ้งข้อผิดพลาดทางไวยากรณ์ทันทีหลังจากป้อนบรรทัดใหม่

ภาษา Atari BASIC มีแกนหลักอยู่ที่ตัวแก้ไขบรรทัด บรรทัดโปรแกรมสามารถมีได้สูงสุดสามบรรทัดบนหน้าจอ โดยแต่ละบรรทัดมีอักขระ 40 ตัว รวมทั้งหมด 120 ตัว เคอร์เซอร์สามารถเคลื่อนที่ได้อย่างอิสระ และตัวแก้ไขจะติดตามโดยอัตโนมัติว่าบรรทัดปัจจุบันเป็นส่วนหนึ่งของบรรทัดโปรแกรม BASIC บรรทัดใด ตัวอย่างเช่น หากเคอร์เซอร์อยู่ที่บรรทัดที่ 30 และผู้ใช้เลื่อนเคอร์เซอร์ขึ้นไปที่บรรทัดที่ 20 การแก้ไขใดๆ จากจุดนั้นจะดำเนินการในบรรทัดที่ 20

โปรแกรมแก้ไขของ Atari BASIC ตรวจจับข้อผิดพลาดหลายอย่างที่ถูกละเลยในเวอร์ชันที่พัฒนาโดย Microsoft หากพบข้อผิดพลาด โปรแกรมแก้ไขจะแสดงบรรทัดนั้นอีกครั้ง โดยไฮไลต์ข้อความที่อยู่ใกล้ข้อผิดพลาดในรูปแบบวิดีโอกลับด้านข้อผิดพลาดจะแสดงเป็นรหัสตัวเลข พร้อมคำอธิบายที่พิมพ์ในคู่มือ[ 23 ]เนื่องจากวิธีการทำงานของโปรแกรมแก้ไขบรรทัด ผู้ใช้จึงสามารถแก้ไขข้อผิดพลาดได้ทันที ในตัวอย่างที่แสดงในภาพด้านบน (ที่มีPRUNT) สามารถแก้ไขข้อผิดพลาดได้โดยการเลื่อนเคอร์เซอร์ไปที่U, พิมพ์(โปรแกรมแก้ไขมีโหมดเขียนทับเท่านั้น) และกด IRETURN

บรรทัดที่ป้อนโดยมีหมายเลขนำหน้าตั้งแต่ 0 ถึง 32767 [ 24 ]จะถูกแทรกในโปรแกรมปัจจุบันหรือแทนที่บรรทัดที่มีอยู่ หากไม่มีหมายเลขบรรทัด ตัวแปลภาษาจะกำหนดหมายเลข -1 ($8000) ให้ และคำสั่งจะถูกดำเนินการทันทีใน "โหมดทันที" คำสั่งRUNจะเรียกใช้โปรแกรมที่จัดเก็บไว้จากหมายเลขบรรทัดที่ต่ำที่สุด Atari BASIC อนุญาตให้เรียกใช้คำสั่งทั้งหมดได้ทั้งสองโหมด ตัวอย่างเช่นLISTสามารถใช้ภายในโปรแกรมได้ ในขณะที่ในตัวแปลภาษาหลายตัว คำสั่งนี้จะใช้งานได้เฉพาะในโหมดทันทีเท่านั้น

ระหว่างการป้อนคำสั่ง สามารถย่อคำหลักได้โดยใช้รูปแบบที่กำหนดโดยPalo Alto Tiny BASICโดยการพิมพ์จุดที่ใดก็ได้ในคำ เช่นจะL.ขยายเป็น และ จะขยายเป็นจำเป็นต้องพิมพ์ตัวอักษรเพียงพอที่จะทำให้คำย่อไม่ซ้ำกัน เช่นต้องใช้เพราะตัวอักษร P ตัวเดียวไม่ซ้ำกัน ในการขยายคำย่อ ตัวแยกคำจะค้นหาในรายการคำสงวนเพื่อหาคำแรกที่ตรงกับส่วนที่ป้อน คำสั่งที่ใช้บ่อยกว่าจะปรากฏก่อนในรายการคำสงวน โดยมี อยู่ที่จุดเริ่มต้น (สามารถพิมพ์เป็น ได้) เมื่อโปรแกรมถูกแก้ไขในภายหลัง โปรแกรมจะเขียนคำเต็มเสมอ ยกเว้นสามกรณี: มีคำพ้องความหมายคือ; มีคำพ้องความหมายคือ; และมีคำพ้องความหมายซึ่งเป็นสตริงว่าง (ดังนั้นและ จึงมีความหมายเหมือนกัน) เหล่านี้เป็นโทเค็นที่แยกจากกัน ดังนั้น จะยังคงเป็นเช่นนั้นในรายการโปรแกรม MS BASIC อนุญาตให้ใช้เป็นคำย่อของ ได้เช่นกันแต่เนื่องจากใช้โทเค็นเดียวกัน จึงขยายกลับเป็นเมื่อed จึงถือว่าเป็นคำย่อ ไม่ใช่คำพ้องความหมาย LISTLI.PLOTPL.REM.LISTPRINT?GOTOGO TOLET10LETA=1010A=10?PRINTPRINTLIST

ตัวแยกคำ

เมื่อผู้ใช้กดขณะแก้ไข บรรทัดปัจจุบันจะถูกคัดลอกไปยังบัฟเฟอร์บรรทัดอินพุต BASIC ในหน่วยความจำระหว่าง$0580และ$05FF [ 24 ] ตัวแยกคำของ Atari BASIC จะสแกนข้อความ แปลงคำหลักแต่ละคำเป็นโทเค็นไบต์เดียว (ตัวอย่างเช่นPRINTคือ$20 ) [ 25 ]ตัวเลขแต่ละตัวเป็นค่าจุดลอยตัวหกไบต์ ชื่อตัวแปรแต่ละตัวเป็นดัชนีในตาราง และอื่นๆ จนกว่าบรรทัดจะถูกแปลงเป็นรูปแบบที่ตีความได้ง่าย ผลลัพธ์จะถูกเก็บไว้ในบัฟเฟอร์เอาต์พุตที่อยู่ในหน่วยความจำว่างที่ต่ำที่สุด 256 ไบต์แรก ซึ่งชี้โดยตัวชี้ LOMEM ที่เก็บไว้ที่$80 , $81 [ 24 ] จากนั้นเอาต์พุตจากตัวแยกคำจะถูกย้ายตำแหน่ง โปรแกรมจะถูกจัดเก็บเป็นต้นไม้การวิเคราะห์[ d ]RETURN

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

ชุดของตัวชี้ (แอดเดรส) ระบุข้อมูลต่างๆ: ชื่อตัวแปรจะถูกเก็บไว้ในตารางชื่อตัวแปร (VNTP – $82 , $83 ) และค่าของตัวแปรจะถูกเก็บไว้ในตารางค่าตัวแปร (ชี้ไปที่ VVTP – $86 , $87 ) ด้วยการอ้างอิงชื่อตัวแปรแบบนี้ การอ้างอิงถึงตัวแปรจึงต้องการเพียงหนึ่งไบต์เพื่อระบุตำแหน่งของรายการในตารางที่เหมาะสม ตัวแปรสตริงมีพื้นที่ของตัวเอง (ชี้ไปที่ STARP – $8C , $8D ) เช่นเดียวกับสแต็กรันไทม์ (ชี้ไปที่ RUNSTK – $8E , $8F ) ซึ่งใช้ในการจัดเก็บหมายเลขบรรทัดของคำสั่งวนซ้ำ ( ) และซับรูทีน ( ) สุดท้าย จุดสิ้นสุดของการใช้งานหน่วยความจำ BASIC จะถูกระบุด้วยแอดเดรสที่เก็บไว้ในตัวชี้ MEMTOP – $90 , $91 ) FOR...NEXTGOSUB...RETURN

ฟังก์ชันทางคณิตศาสตร์

Atari BASIC มีฟังก์ชันตรีโกณมิติสามฟังก์ชัน ได้แก่ ไซน์ โคไซน์ และอาร์คแทนเจนต์DEGและRADสามารถตั้งค่าได้ว่าฟังก์ชันเหล่านี้ใช้หน่วยเรเดียนหรือองศา โดยค่าเริ่มต้นจะใช้เรเดียน นอกจากนี้ยังมีฟังก์ชันเพิ่มเติมอีกแปดฟังก์ชัน ได้แก่ การปัดเศษ ลอการิทึม และรากที่สอง ฟังก์ชันสุ่มRNDจะสร้างตัวเลขระหว่าง 0 ถึง 1 โดยไม่ได้ใช้พารามิเตอร์

การจัดการสตริง

Atari BASIC คัดลอกระบบการจัดการสตริงของHewlett-Packard BASIC [ 27 ] โดยที่ชนิดข้อมูลพื้นฐานคืออักขระตัวเดียว และสตริงคืออาร์เรย์ของอักขระ ภายใน สตริงจะถูกแทนด้วยตัวชี้ไปยังอักขระตัวแรกในสตริงและความยาวของมัน ในการเริ่มต้นสตริง จะต้องกำหนดมิติให้กับสตริงด้วยความยาวสูงสุด ตัวอย่างเช่น:

10 DIM A$ ( 20 ) 20 PRINT "ป้อนข้อความ: " ; 30 INPUT A$ 40 PRINT A$

ในโปรแกรมนี้ มีการกำหนดความยาวของสตริงไว้ที่ 20 ตัวอักษร และตัวอักษรใดๆ ที่เกินความยาวของสตริงจะถูกตัดทิ้ง ความยาวสูงสุดของสตริงคือ 32,768 ตัวอักษร โปรแกรมนี้ไม่รองรับอาร์เรย์ของสตริง

การเข้าถึงสตริงทำได้โดยใช้ฟังก์ชันการจัดทำดัชนีอาร์เรย์ หรือการแบ่งส่วน (slicing ) ฟังก์ชัน A$(1,10)นี้จะส่งคืนสตริงที่มีอักขระ 10 ตัวแรกของA$อาร์เรย์ อาร์เรย์มีการจัดทำดัชนีเริ่มต้นที่ 1 ดังนั้นสตริงที่มีความยาว 10 จะเริ่มต้นที่ 1 และสิ้นสุดที่ 10 ฟังก์ชันการแบ่งส่วนจะตั้งค่าตัวชี้ไปยังจุดเริ่มต้นและจุดสิ้นสุดภายในหน่วยความจำที่จัดสรรไว้แล้ว

อาร์เรย์ไม่ได้ถูกกำหนดค่าเริ่มต้น ดังนั้นอาร์เรย์ตัวเลขหรือสตริงจึงมีข้อมูลอะไรก็ตามที่อยู่ในหน่วยความจำเมื่อมีการจัดสรร เทคนิคต่อไปนี้ช่วยให้สามารถกำหนดค่าเริ่มต้นให้กับสตริงได้อย่างรวดเร็ว และยังเป็นประโยชน์สำหรับการล้างข้อมูลที่ไม่ต้องการออกจากหน่วยความจำขนาดใหญ่ อาร์เรย์ตัวเลขสามารถล้างได้โดยใช้ลูป FOR...NEXT เท่านั้น:

10 REM กำหนดค่าเริ่มต้นให้กับ A$ ด้วยอักขระ X จำนวน 1000 ตัว20 DIM A$ ( 1000 ) 30 A$ = "X" : A$ ( 1000 ) = A$ : A$ ( 2 ) = A$

การต่อสตริงทำงานดังตัวอย่างต่อไปนี้ สตริงเป้าหมายต้องมีขนาดใหญ่พอที่จะรองรับสตริงที่ต่อกันแล้ว มิฉะนั้นจะเกิดข้อผิดพลาด:

10 DIM A$ ( 12 ), B$ ( 6 ) 20 A$ = "Hello " : B$ = "there!" 30 A$ ( LEN ( A$ ) + 1 ) = B$ 40 PRINT A$

ค่าในคำสั่ง DATA จะคั่นด้วยเครื่องหมายจุลภาคและไม่มีประเภท ดังนั้น สตริงในคำสั่ง DATA จึงมักไม่ถูกล้อมด้วยเครื่องหมายอัญประกาศ ด้วยเหตุนี้ ข้อมูลจึงไม่สามารถมีเครื่องหมายจุลภาคได้ แต่สามารถมีเครื่องหมายอัญประกาศคู่ได้ ค่าตัวเลขในคำสั่ง DATA จะถูกอ่านเป็นสตริงหรือตัวเลข ขึ้นอยู่กับประเภทของตัวแปรที่อ่านเข้าไป คำสั่ง READ ไม่สามารถใช้กับตัวแปรแบบอาร์เรย์ได้

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

ระบบปฏิบัติการ Atari OSมีระบบย่อยสำหรับ การรับส่งข้อมูล (I/O) อุปกรณ์ ต่อพ่วงที่เรียกว่า CIO (Central Input/Output) โปรแกรมส่วนใหญ่สามารถเขียนได้โดยไม่ขึ้นอยู่กับอุปกรณ์ที่ใช้ เนื่องจากทั้งหมดเป็นไปตามอินเทอร์เฟซทั่วไป ซึ่งเป็นเรื่องที่หาได้ยากในคอมพิวเตอร์ส่วนบุคคลในสมัยนั้น ไดรเวอร์อุปกรณ์ใหม่สามารถเขียนได้ค่อนข้างง่ายและจะพร้อมใช้งานโดยอัตโนมัติสำหรับ Atari BASIC และโปรแกรมอื่นๆ ที่ใช้ Atari OS และไดรเวอร์ที่มีอยู่สามารถถูกแทนที่หรือเสริมด้วยไดรเวอร์ใหม่ได้ ตัวอย่างเช่น ตัวควบคุมE:ทดแทนสามารถใช้แทนตัวควบคุมใน ROM เพื่อแสดงผลแบบ 80 คอลัมน์ หรือใช้ร่วมกันเพื่อสร้างค่าตรวจสอบความถูกต้อง (checksum ) ทุกครั้งที่มีการส่งคืนบรรทัด (เช่น ใช้ในการตรวจสอบรายการโปรแกรมที่ป้อนเข้าไป)

ภาษา Atari BASIC รองรับการเข้าถึง CIO ด้วยคำสงวนOPEN #, CLOSE #, PRINT #, INPUT #, GET #, PUT #, NOTE #, POINT #และXIO #มีรูทีนในระบบปฏิบัติการสำหรับฟังก์ชันการวาดภาพกราฟิกอย่างง่าย แต่ไม่ใช่ทุกฟังก์ชันที่จะมีให้ใช้งานเป็นคำหลักเฉพาะของ BASIC คำสั่งPLOTและDRAWTOสำหรับการวาดเส้นนั้นรองรับ แต่คำสั่งที่ให้การเติมพื้นที่สำหรับรูปทรงเรขาคณิตเชิงเส้นแบบพื้นฐานนั้นไม่รองรับ คุณสมบัติการเติมสามารถใช้งานได้ผ่านจุดเข้าใช้งาน CIO ทั่วไป ซึ่งเรียกใช้โดยใช้คำสั่งBASIC XIO

คำสั่ง BASIC OPEN #เตรียมอุปกรณ์สำหรับการเข้าถึง I/O:

10 REM เปิดอุปกรณ์เทปคาสเซ็ตต์บนช่องสัญญาณที่ 1 เพื่ออ่านข้อมูลในภาษา BASIC 20 OPEN # 1 , 4 , 0 , "C:MYPROG.DAT"

ในที่นี้OPEN #หมายถึง "ตรวจสอบให้แน่ใจว่าช่อง 1 ว่าง" เรียกใช้ ไดรเวอร์ C:เพื่อเตรียมอุปกรณ์ (ซึ่งจะตั้งค่าความตึงของม้วนเทปคาสเซ็ตและเลื่อนหัวอ่านไปข้างหน้า ทำให้เครื่องเล่นเทปคาสเซ็ตอยู่ในสถานะ "หยุดชั่วคราว") เลข4หมายถึง "อ่าน" (รหัสอื่นๆ คือ8สำหรับเขียน และ12 = 8 + 4สำหรับ "อ่านและเขียน") ตัวเลขที่สามเป็นข้อมูลเสริม ตั้งค่าเป็น 0 เมื่อไม่จำเป็นC:MYPROG.DATคือชื่อของอุปกรณ์และชื่อไฟล์ ชื่อไฟล์จะถูกละเว้นสำหรับไดรเวอร์เทปคาสเซ็ต อุปกรณ์ทางกายภาพอาจมีหมายเลข (ส่วนใหญ่เป็นดิสก์ เครื่องพิมพ์ และอุปกรณ์อนุกรม) ดังนั้น " P1: " อาจเป็นพลอตเตอร์และ " P2: " เป็นเครื่องพิมพ์แบบเดซี่วีล หรือ " D1: " อาจเป็นไดรฟ์ดิสก์ตัวหนึ่งและ " D2: " เป็นต้น หากไม่มี จะถือว่าใช้เลข 1

คำสั่ง LPRINT ส่งข้อความสตริงไปยังเครื่องพิมพ์

สามารถอ่านค่า A ได้โดยใช้คำสั่ง PEEKเพื่อเข้าถึงตำแหน่งหน่วยความจำที่เก็บรักษาไว้โดยไดรเวอร์แป้นพิมพ์ หรือโดยการเปิดเป็นไฟล์ (เช่น) วิธีหลังนี้จะรอการกดปุ่มใดปุ่มหนึ่ง OPEN1,4,0,"K:":GET#1,A$

การพิมพ์คำสั่งDOSจาก BASIC จะออกไปยัง เมนูคำสั่ง Atari DOSโปรแกรมที่ยังไม่ได้บันทึกจะสูญหายไป เว้นแต่จะเปิดใช้งานคุณสมบัติการสลับไฟล์ในดิสก์ปัจจุบัน ไม่มีคำสั่งใดที่จะแสดงไดเร็กทอรีของดิสก์จากภายใน BASIC ต้องทำโดยการออกไปยัง DOS

กราฟิกและเสียง

Atari BASIC รองรับเสียง (ผ่าน คำสั่ง SOUND ) กราฟิก ( GRAPHICS, SETCOLOR, COLOR, PLOT, DRAWTO ) และตัวควบคุม ( STICK, STRIG, PADDLE, PTRIG ) [ 28 ]คำ สั่ง SOUNDจะตั้งค่าช่องสัญญาณคลื่นสี่เหลี่ยม 4 ช่องของฮาร์ดแวร์ด้วยพารามิเตอร์สำหรับระดับเสียง ระดับเสียงสูงต่ำ และการบิดเบือน

ความสามารถขั้นสูงของฮาร์ดแวร์ เช่น ความละเอียดของเสียงที่สูงขึ้น ตัวกรองความถี่สูง เสียงและรูปคลื่นดิจิทัล กราฟิกผู้เล่น/ขีปนาวุธ ( สไปรท์ ) ชุดอักขระที่กำหนดใหม่ การเลื่อน และโหมดกราฟิกแบบกำหนดเอง ไม่ได้รับการสนับสนุนโดย BASIC สิ่งเหล่านี้จะต้องใช้รูทีนภาษาเครื่องหรือคำสั่ง PEEK/POKE โหมดอักขระ/กราฟิกพื้นฐาน 16 โหมดที่ฮาร์ดแวร์รองรับนั้น บางโหมดไม่สามารถเข้าถึงได้โดยตรงจาก BASIC บน Atari 400/800 เนื่องจาก ROM ของระบบปฏิบัติการไม่รองรับ ซึ่งรวมถึงโหมดอักขระหลายสีบางโหมด (โหมด ANTIC 4 และ 5) โหมดอักขระแบบมีหาง (โหมด ANTIC 3) และโหมด 2 และ 4 สีที่มีความละเอียดสูงสุด (โหมด ANTIC C และ E, 160 × 192 พิกเซล) วิธีเดียวที่จะเข้าถึงได้คือผ่านPEEK/POKEหรือภาษาเครื่อง โดยการตั้งค่ารีจิสเตอร์ ANTIC และรายการแสดงผลด้วยตนเอง ROM ของระบบปฏิบัติการบน XL/XE ได้เพิ่มการสนับสนุนสำหรับโหมดเหล่านี้ ยกเว้นโหมด ANTIC 3 ซึ่งต้องใช้ชุดอักขระที่กำหนดใหม่ใน RAM เพื่อให้ทำงานได้อย่างถูกต้อง[ 29 ]

โหมดบิตแมปใน BASIC โดยปกติจะตั้งค่าให้มีหน้าต่างข้อความ occupying สี่แถวสุดท้ายที่ด้านล่างของหน้าจอ เพื่อให้ผู้ใช้สามารถแสดงข้อความแจ้งเตือนและป้อนข้อมูลในโปรแกรมได้ หากเพิ่ม 16 เข้าไปในหมายเลขโหมดที่เรียกใช้ผ่าน คำสั่ง GRAPHICSหน้าจอทั้งหมดจะอยู่ในโหมดบิตแมป (เช่น) หากเรียกใช้โหมดบิตแมปแบบเต็มหน้าจอ Atari BASIC จะสลับกลับไปเป็นโหมดข้อความอย่างราบรื่นเมื่อการทำงานของโปรแกรมสิ้นสุดลง เพื่อหลีกเลี่ยงไม่ให้ผู้ใช้พบกับหน้าจอที่ไม่ตอบสนองซึ่งต้องแก้ไขโดยการพิมพ์คำสั่ง blind หรือรีเซ็ตคอมพิวเตอร์ GRAPHICS 8+16

พิกัดของบิตแมปอยู่ในช่วง 0 ถึงค่าสูงสุดของแถว/คอลัมน์ลบหนึ่ง ดังนั้นในโหมด 6 (160 × 192) พิกัดสูงสุดสำหรับพิกเซลจึงเป็น 159 และ 191 หาก Atari BASIC พยายามแสดงผลเกินพิกัดที่อนุญาตสำหรับโหมดนั้น จะเกิดข้อผิดพลาดขณะรันไทม์

เทคนิคขั้นสูง

สตริงเป็นวิธีการหนึ่งในการจัดการหน่วยความจำ

ที่อยู่เริ่มต้นของสตริงจะถูกเก็บไว้ในตารางตัวแปร ที่อยู่ของสตริงสามารถถูกกำหนดเส้นทางใหม่ให้ชี้ไปยังพื้นที่ใดๆ ใน RAM ได้ วิธีนี้ช่วยให้สามารถใช้รูทีนการเลื่อนหน่วยความจำอย่างรวดเร็วซึ่งเป็นพื้นฐานของการกำหนดค่าสตริงและสตริงย่อยจาก BASIC ไปยังหน่วยความจำที่ใช้สำหรับหน้าจอหรือกราฟิกผู้เล่น/ขีปนาวุธได้ โดยเฉพาะอย่างยิ่งมีประโยชน์สำหรับการเคลื่อนที่ในแนวตั้งอย่างรวดเร็วของภาพผู้เล่น/ขีปนาวุธโดยตรงจาก Atari BASIC

การเข้าถึงแบบสุ่มผ่านทาง DATA/RESTORE

ตัวแปรและนิพจน์ตัวเลขสามารถใช้เป็นพารามิเตอร์สำหรับRESTOREคำสั่งได้ ทำให้สามารถDATAเข้าถึงคำสั่งแบบสุ่มผ่านโค้ดได้ เช่นนอกจากนี้ยังสามารถใช้เพื่อจำลองอาร์เรย์สตริงแบบคงที่ได้อีกด้วย RESTOREROOMBASE+ROOMNUMBER:READDESCRIPTION$,TREASURE$,EXITSRESTORESTRBASE+INDEX:READA$:PRINTA$

การจัดการข้อผิดพลาดด้วย TRAP

เมื่อเกิดข้อผิดพลาด โปรแกรมTRAPจะข้ามไปยังหมายเลขบรรทัด ซึ่งช่วยลดความจำเป็นในการตรวจสอบข้อผิดพลาดด้วยตนเอง ตัวอย่างเช่น เมื่อวาดกราฟิกบนหน้าจอ ไม่จำเป็นต้องตรวจสอบว่าเส้นต่างๆ เกินขอบเขตหน้าจอของโหมดกราฟิกปัจจุบันหรือไม่ สถานะข้อผิดพลาดนี้สามารถดักจับได้ และจัดการกับข้อผิดพลาดได้หากจำเป็น

รวมถึง

คำสั่ง นี้ENTERอ่านซอร์สโค้ดจากอุปกรณ์และผสานเข้ากับโปรแกรมปัจจุบัน ราวกับว่าผู้ใช้เป็นผู้พิมพ์เอง วิธีนี้ช่วยให้สามารถบันทึกโปรแกรมเป็นส่วนๆ ได้ โดยใช้คำสั่ง `include` LISTเพื่ออ่านส่วนเหล่านั้นENTERเข้ามาผสานหรือแทนที่โค้ดที่มีอยู่ ด้วยการใช้บล็อกหมายเลขบรรทัดที่ไม่ทับซ้อนกัน โปรแกรมเมอร์สามารถสร้างไลบรารีของซับรูทีนและผสานเข้ากับโปรแกรมใหม่ได้ตามต้องการ

รหัสที่แก้ไขตัวเองได้

สามารถตั้งค่าโปรแกรมแก้ไขให้ดึงข้อมูลจากหน้าจอซ้ำๆ จนกว่าจะถึงจุดสิ้นสุดของไฟล์ (EOF) วิธีนี้ช่วยให้โปรแกรมสามารถเขียนโค้ดใหม่ตามด้วยCONTคำสั่งลงบนหน้าจอ จากนั้นเมื่อวางเคอร์เซอร์ไว้ที่จุดเริ่มต้นของโค้ดใหม่STOPโปรแกรมที่กำลังทำงานอยู่จะอ่านโค้ดใหม่นั้นเข้ามา แล้วจึงดำเนินการต่อด้วยCONTคำสั่งถัดไป

ภาษาเครื่องฝังตัว

ภาษา Atari BASIC สามารถเรียกใช้ซับรูทีนโค้ดเครื่องที่เก็บไว้ในสตริงหรือPOKEในหน่วยความจำได้ พื้นที่ 256 ไบต์ที่เริ่มต้นที่แอดเดรส 1536 ( $0600 ) มักถูกใช้เพื่อจุดประสงค์นี้

โค้ดเครื่องจะถูกเรียกใช้ด้วยUSRฟังก์ชัน พารามิเตอร์แรกคือที่อยู่ของซับรูทีน และค่าถัดไปคือพารามิเตอร์ หากโค้ดถูกเก็บไว้ในสตริงที่มีชื่อROUTINE$ก็สามารถเรียกใช้ได้โดยใช้พารามิเตอร์สองANSWER=USR(ADR(ROUTINE$),VAR1,VAR2)ตัว

พารามิเตอร์จะถูกผลักเข้าไปในสแต็กฮาร์ดแวร์ในรูปแบบจำนวนเต็ม 16 บิต ตามลำดับที่ระบุไว้ในการUSRเรียกใช้ โดยเรียงจากไบต์ต่ำไปไบต์สูง ไบต์สุดท้ายจะถูกผลักเข้าไปเพื่อระบุจำนวนอาร์กิวเมนต์ โค้ดภาษาเครื่องจะต้องลบค่าเหล่านี้ออกก่อนที่จะส่งค่ากลับผ่านRTSคำสั่ง ค่า 16 บิตสามารถส่งกลับไปยัง BASIC ได้โดยการวางไว้ในแอดเดรส 212 และ 213 ( $D4และ$D5 )

ผลงาน

ตามทฤษฎีแล้ว Atari BASIC ควรทำงานได้เร็วกว่า BASIC รุ่นใหม่ๆ ที่ใช้รูปแบบ MS เนื่องจากโค้ดต้นฉบับถูกแยกเป็นโทเค็นอย่างสมบูรณ์เมื่อป้อนเข้าไป ขั้นตอนการแยกเป็นโทเค็นและการแยกวิเคราะห์ทั้งหมดจึงเสร็จสมบูรณ์แล้ว แม้แต่การดำเนินการทางคณิตศาสตร์ที่ซับซ้อนก็พร้อมใช้งาน โดยค่าคงที่ตัวเลขใดๆ จะถูกแปลงเป็นรูปแบบ 40 บิตภายใน และค่าตัวแปรจะถูกค้นหาตามที่อยู่แทนที่จะต้องค้นหา[ e ]แม้จะมีข้อดีเหล่านี้ ในทางปฏิบัติ Atari BASIC ก็ช้ากว่า BASIC สำหรับคอมพิวเตอร์บ้าน ส่วนใหญ่ ซึ่งมักจะช้ากว่ามาก[ 30 ]

ในการทดสอบประสิทธิภาพ สองรายการที่ใช้กันอย่างแพร่หลาย ในยุคนั้น ได้แก่ การทดสอบ Sieve of EratosthenesของนิตยสารByteและ การทดสอบ ประสิทธิภาพ Creative Computingที่เขียนโดยDavid H. Ahlนั้น Atari อยู่ในอันดับท้ายๆ ของรายการในแง่ของประสิทธิภาพ และช้ากว่าApple IIและPET ในยุคนั้นมาก [ 31 ]ทั้งๆ ที่ใช้ CPU เดียวกันแต่ทำงานด้วยความเร็วประมาณสองเท่า โดยมีประสิทธิภาพต่ำกว่าเครื่องที่ช้ากว่าอย่างZX81และแม้แต่เครื่องคิดเลขแบบตั้งโปรแกรมได้บางรุ่น[ 32 ]

ความช้าของภาษาส่วนใหญ่เกิดจากปัญหาสามประการ[ 30 ]

ประการแรกคือ รูทีนการคำนวณเลขทศนิยมไม่ได้รับการปรับให้เหมาะสมอย่างดี ในการทดสอบ Ahl การดำเนินการเลขยกกำลังเพียงครั้งเดียวเป็นสาเหตุหลักที่ทำให้เครื่องทำงานได้ไม่ดี[ 30 ]การแปลงระหว่างเลขทศนิยมและจำนวนเต็ม 16 บิตก็ช้ามากเช่นกัน ภายใน จำนวนเต็มเหล่านี้ใช้สำหรับหมายเลขบรรทัดและดัชนีอาร์เรย์ พร้อมกับงานอื่นๆ อีกเล็กน้อย แต่ตัวเลขในโปรแกรมที่ถูกแปลงเป็นโทเค็นจะถูกจัดเก็บใน รูปแบบ เลขฐานสิบแบบเข้ารหัสไบนารี (BCD) [ 33 ]เมื่อใดก็ตามที่พบสิ่งเหล่านี้ เช่น หมายเลขบรรทัดในGOTO 100ค่า BCD จะถูกแปลงเป็นจำนวนเต็ม ซึ่งอาจใช้เวลานานถึง 3500 ไมโครวินาที[ 34 ]

อีกประเด็นหนึ่งคือวิธีที่ Atari BASIC ใช้ในการสร้างสาขา ในการดำเนินการสาขาใน a GOTOหรือ b GOSUBตัวแปลภาษาจะค้นหาผ่านโปรแกรมทั้งหมดเพื่อหาหมายเลขบรรทัดที่ตรงกัน[ 35 ]ในทางตรงกันข้าม BASIC เวอร์ชันร่วมสมัยที่พัฒนามาจาก MS จะค้นหาไปข้างหน้าจากบรรทัดปัจจุบันหากหมายเลขบรรทัดของเป้าหมายสาขามากกว่า ซึ่งจะช่วยปรับปรุงประสิทธิภาพการทำงานของสาขาได้ประมาณสองเท่าโดยเฉลี่ย

ปัญหาที่เกี่ยวข้องและร้ายแรงกว่าคือการใช้งาน ลูป FOR... NEXTเมื่อFORมีการดำเนินการคำสั่ง Atari BASIC จะบันทึกหมายเลขบรรทัด ทุกครั้งNEXTที่ถึงบรรทัดนั้น มันจะค้นหาบรรทัดนั้นในโปรแกรม แม้ว่าจะอยู่ในตำแหน่งเดียวกันกับครั้งสุดท้ายก็ตาม[ 30 ] BASIC อื่นๆ ทั้งหมดจะบันทึกตำแหน่งหน่วยความจำของFORคำสั่งและสามารถกลับไปยังตำแหน่งนั้นได้ทันทีโดยไม่ต้องค้นหา

สาเหตุของผลงานที่ย่ำแย่นี้สามารถอธิบายได้ดีที่สุดด้วยคำกล่าวของหนึ่งในผู้เขียนหลักอย่าง บิล วิลกินสัน ซึ่งกล่าวไว้ในปี 1982 ว่า:

โดยส่วนตัวแล้ว ฉันไม่เคยแน่ใจเลยว่าภาษาที่ตีความ (เช่น BASIC) จะต้องเร็วเสมอไป ผู้เขียน... ได้กล่าวอ้างว่า Atari BASIC เป็นภาษาที่ช้าที่สุดเท่าที่เคยสร้างมา ความคิดแรกของฉันคือ "ใครสนกันล่ะ?" [ 36 ]

อาจเปรียบเทียบปรัชญานี้กับปรัชญาของSteve Wozniak ที่ ใช้ Apple BASICสำหรับApple I รุ่นแรก ซึ่งได้รับการออกแบบมาโดยเฉพาะเพื่อให้มีประสิทธิภาพที่จำเป็นสำหรับการเขียนเกม:

หลังจากออกแบบฮาร์ดแวร์เกมอาร์เคดแล้ว ฉันรู้ว่าการที่สามารถเขียนโปรแกรมเกมเหล่านั้นด้วยภาษา BASIC จะเปลี่ยนโลกได้[ 37 ]

มี BASIC จากผู้พัฒนาภายนอกหลายรายปรากฏขึ้นบนแพลตฟอร์ม ซึ่งแก้ไขปัญหาเหล่านี้บางส่วนหรือทั้งหมด รวมถึงBASIC XL ของ Wilkinson เอง ซึ่งลดเวลาในการทดสอบByte benchmark จาก 194 วินาทีเหลือ 58 วินาที[ 30 ]เร็วกว่าเดิมถึงสามเท่า ในการทดสอบ Ahl benchmark นั้น Atari BASIC ใช้เวลา 405 วินาที ในขณะที่โค้ดเดียวกันใน Turbo-BASIC XL ใช้เวลาเพียง 41.6 วินาที ซึ่งเป็นการปรับปรุงที่ดีขึ้นหลายเท่าตัว[ 38 ] BASIC A+และ BASIC XE ก็มาจาก Wilkinson เช่นกัน

ความแตกต่างจาก Microsoft BASIC

  • ระบบจะตรวจสอบไวยากรณ์และเน้นข้อผิดพลาดทันทีเมื่อป้อนข้อมูลในแต่ละบรรทัด
  • ชื่อตัวแปรสามารถมีความยาวได้ตามต้องการ และอักขระทุกตัวมีความสำคัญ
  • คำหลักใดๆ ก็สามารถใช้เป็นตัวแปรได้ หากกำหนดด้วยLET. [ 39 ]
  • คำหลักต่อไปนี้ไม่มีอยู่ใน Atari BASIC: INKEY$, CLS​​, DEF FN, SPC, TAB, ELSE.
  • ต้องกำหนดขนาดของอาร์เรย์ก่อนใช้งานเสมอ โดย Microsoft BASIC จะกำหนดค่าเริ่มต้นของอาร์เรย์เป็น 10 องค์ประกอบหากไม่ได้กำหนดขนาดไว้
  • ตัวแปรสตริงจะถูกมองว่าเป็นอาร์เรย์ของอักขระ และต้องกำหนดขนาดก่อนใช้งาน MS BASIC จัดเก็บสตริงไว้ในฮีปและบางครั้งจะหยุดชั่วคราวเพื่อทำการเก็บกวาดหน่วยความจำ (garbage collection )
  • ฟังก์ชันLEFT$, MID$, และRIGHT$ถูกแทนที่ด้วยการจัดทำดัชนีสตริง
  • ไม่มีตัวดำเนินการสำหรับการเชื่อมต่อสตริง
  • ไม่มีอาร์เรย์ของสตริง
  • ไม่มีการรองรับตัวแปรจำนวนเต็ม
  • ไม่มีตัวดำเนินการบิตไวส์
  • INPUTไม่อนุญาตให้แสดงข้อความแจ้งเตือน
  • PRINTอาจย่อได้เป็น as ?ใน Microsoft BASIC แต่ Atari BASIC ไม่ได้แปลงเป็นโทเค็นPRINTจึงยังคงเป็นเครื่องหมายคำถามอยู่
  • เป้าหมายของGOTOand GOSUBสามารถเป็นตัวแปรหรือนิพจน์ได้
  • RESTOREอาจรับค่าคงที่ตัวเลข ตัวแปร หรือนิพจน์เป็นพารามิเตอร์ ซึ่งจะทำให้คำสั่งถัดไปREADเริ่มต้นจากหมายเลขบรรทัดที่ระบุ
  • FOR..NEXTลูปใน Atari BASIC ต้องมีการอ้างอิงชื่อตัวแปรในNEXTคำสั่ง ในขณะที่ Microsoft BASIC ไม่จำเป็นต้องมี การอ้างอิงชื่อตัวแปร
  • ไม่อนุญาตให้ใช้ตัวแปรหลายตัวในNEXTคำสั่งแบบเดียวกับใน Microsoft BASIC (เช่นNEXT X,Y)
  • LISTใช้เครื่องหมายจุลภาคในการแยกช่วงแทนเครื่องหมายลบ

คำสำคัญ

หมายเหตุ

  1. ^ AppleSoft BASIC ใช้พื้นที่หน่วยความจำตั้งแต่ $D000 ถึง $F7FF รวมทั้งหมด 10240 ไบต์
  2. ^ Commodore BASIC ใช้พื้นที่หน่วยความจำหลักสองส่วน คือ $A000 - $BFFFและ $E000 - $ E4D2 [ 8 ]
  3. ^ Applesoft ใช้หน่วยความจำตั้งแต่ $D000ถึง $F7FFรวมถึงไลบรารี FP [ 9 ]
  4. ^แม้ว่าโครงสร้างต้นไม้การวิเคราะห์จะถูกนำมาใช้ในรูปแบบของตาราง ซึ่งจริงๆ แล้วเป็นเพียงรายละเอียดการใช้งานเท่านั้น
  5. ^ Microsoft BASIC ใช้ตัวอักษรสำคัญเพียงสองตัวในชื่อตัวแปร เนื่องจากตัวแปรเหล่านั้นถูกจัดเก็บไว้ในรายการที่มีเพียงสองไบต์ของ ASCII สำหรับชื่อ เพื่อปรับปรุงเวลาในการค้นหา
  • Atari BASIC: ด้านดี ด้านร้าย และด้านน่าเกลียด
  • Albrecht, Bob; Finkel, LeRoy; Brown, Jerald R. (1979). Atari Basic - คู่มือการเรียนรู้ด้วยตนเอง . สืบค้นเมื่อ29 มิถุนายน 2013 .
  • Albrecht, Bob; Finkel, LeRoy; Brown, Jerald R. (1985). Atari Basic - XL Edition . สืบค้นเมื่อ29 มิถุนายน 2013 .
  • Wikiversity: การเขียนโปรแกรม Atari BASIC
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Atari_BASIC&oldid=1333991426 "

สรุปเนื้อหา

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

ข้อมูลสำคัญเกี่ยวกับ อาตาริ บาซิก

Atari BASIC คือ ตัวแปล ภาษา โปรแกรม BASIC ที่มาพร้อมกับ คอมพิวเตอร์ Atari 8 บิต แตกต่างจาก BASIC ส่วนใหญ่ในยุคคอมพิวเตอร์บ้านของอเมริกา Atari BASIC ไม่ได้ดัดแปลงมาจาก Microsoft...

การพัฒนา

เครื่องที่ต่อมากลายเป็น คอมพิวเตอร์ Atari 8 บิต นั้น เดิมทีได้รับการพัฒนาเป็น เครื่องเล่นเกมคอนโซล รุ่นที่สองเพื่อทดแทน Atari VCS Ray Kassar ประธานคนใหม่ของ Atari ตัดสินใจที่จะท้าทาย Apple Computer โดยการสร้างคอมพิวเตอร์สำหรับใช้ในบ้านแทน [ 2 ]

เชพาร์ดสัน ไมโครซิสเต็มส์

ในเดือนกันยายน พ.ศ. 2521 Shepardson Microsystems ชนะการประมูลเพื่อพัฒนา BASIC ให้เสร็จสมบูรณ์ [ 3 ] ในขณะนั้น พวกเขากำลังพัฒนา Cromemco 16K Structured BASIC สำหรับเครื่อง Cromemco S-100 ที่ใช้บัส Z80 ให้เสร็จสมบูรณ์ [ 5 ] [ 6 ] นักพัฒนา Kathleen O'Brien และ...

การเผยแพร่

เวอร์ชันที่เชพาร์ดสันมอบให้กับอาตาริสำหรับการสาธิตในงาน CES ไม่ได้ตั้งใจให้เป็นเวอร์ชันสุดท้าย และเชพาร์ดสันยังคงแก้ไขข้อบกพร่องต่อไป [ 11 ] โดยที่เชพาร์ดสันไม่รู้ อาตาริได้ส่งเวอร์ชัน CES ไปยังฝ่ายผลิตแล้ว [ 13 ] เวอร์ชันนี้เรียกว่า Revision A...