อ่าน 13 นาที
อาตาริ บาซิก
Atari BASIC คือ ตัวแปล ภาษา โปรแกรม BASIC ที่มาพร้อมกับ คอมพิวเตอร์ Atari 8 บิต แตกต่างจาก BASIC ส่วนใหญ่ในยุคคอมพิวเตอร์บ้านของอเมริกา Atari BASIC ไม่ได้ดัดแปลงมาจาก Microsoft...
อาตาริ บาซิก
| อาตาริ บาซิก | |
|---|---|
![]() โปรแกรมพร้อมใช้งาน | |
| ตระกูล | พื้นฐาน |
| ออกแบบโดย | พอล ลอตัน แคธลีน โอ'ไบรอัน แครอล ชอว์ (คู่มือ) คีธ บรูว์สเตอร์ (คู่มือ) |
| นักพัฒนา | เชพาร์ดสัน ไมโครซิสเต็มส์ |
| ปรากฏครั้งแรก | พ.ศ. 2522 |
| เวอร์ชันเสถียร | ฉบับแก้ไข C / 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 ]
เชพาร์ดสัน ไมโครซิสเต็มส์

ในเดือนกันยายน พ.ศ. 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จึงยังคงเป็นเครื่องหมายคำถามอยู่- เป้าหมายของ
GOTOandGOSUBสามารถเป็นตัวแปรหรือนิพจน์ได้ RESTOREอาจรับค่าคงที่ตัวเลข ตัวแปร หรือนิพจน์เป็นพารามิเตอร์ ซึ่งจะทำให้คำสั่งถัดไปREADเริ่มต้นจากหมายเลขบรรทัดที่ระบุFOR..NEXTลูปใน Atari BASIC ต้องมีการอ้างอิงชื่อตัวแปรในNEXTคำสั่ง ในขณะที่ Microsoft BASIC ไม่จำเป็นต้องมี การอ้างอิงชื่อตัวแปร- ไม่อนุญาตให้ใช้ตัวแปรหลายตัวใน
NEXTคำสั่งแบบเดียวกับใน Microsoft BASIC (เช่นNEXT X,Y) LISTใช้เครื่องหมายจุลภาคในการแยกช่วงแทนเครื่องหมายลบ
คำสำคัญ
| คำหลัก | คำอธิบาย |
|---|---|
| แอ็บเอส | ส่งคืนค่าสัมบูรณ์ของตัวเลข |
| เอดีอาร์ | ส่งคืนที่อยู่ในหน่วยความจำของตัวแปร (ส่วนใหญ่ใช้สำหรับรูทีนโค้ดเครื่องที่เก็บไว้ในตัวแปร) |
| และ | การเชื่อมโยงเชิงตรรกะ |
| เอเอสซี | ส่งคืน ค่า ATASCIIของอักขระ |
| เอทีเอ็น | ส่งคืนค่าอาร์กแทนเจนต์ของจำนวน |
| ลาก่อน | โอนการควบคุมไปยังโปรแกรม "ทดสอบตัวเอง" ภายใน ("Memo Pad" ในรุ่นแรกๆ) |
| CHR$ | ส่งคืนอักขระโดยใช้ค่า ATASCII ที่ป้อน |
| โหลด | โหลด โปรแกรม ที่แปลงเป็นโทเค็นแล้วจากเทปคาสเซ็ตซึ่งบันทึกไว้ด้วย CSAVE |
| อุดตัน | ส่งคืนค่าลอการิทึมฐานสิบของจำนวน |
| ปิด | ยุติการถ่ายโอนที่ค้างอยู่ (flush) และปิดช่องทาง I/O |
| ซีแอลอาร์ | ล้างหน่วยความจำของตัวแปรและสแต็กโปรแกรม |
| สี | เลือกสีที่เหมาะสมที่จะวาดลงไป |
| คอม | การใช้งานคำสั่ง COMMON ของ MS Basic ถูกยกเลิก ตรวจพบแล้ว แต่โค้ดสำหรับ DIM กลับถูกเรียกใช้งานแทน |
| ต่อ | ดำเนินการต่อโปรแกรมหลังจากคำสั่ง STOP ที่บรรทัดถัดไป (ดู STOP) |
| ซีเอส | ส่งคืนค่าโคไซน์ของตัวเลข |
| ซีเอสเซฟ | บันทึกโปรแกรมใน รูปแบบ โทเค็น ลงใน เทปคาสเซ็ต (ดู CLOAD) |
| ข้อมูล | จัดเก็บข้อมูลในรูปแบบรายการของค่าตัวเลขหรือสตริง |
| ปริญญา | สลับฟังก์ชันตรีโกณมิติเพื่อคำนวณในหน่วยองศา ( เรเดียนเป็นโหมดเริ่มต้น) (ดู RAD) |
| ดิม | กำหนดขนาดของสตริงหรืออาร์เรย์ (ดู COM) |
| ดีเอส | โอนการควบคุมไปยังระบบปฏิบัติการดิสก์ (DOS); หากไม่ได้โหลด DOS ไว้ จะทำเช่นเดียวกับคำสั่ง BYE |
| วาดโต | ลากเส้นไปยังพิกัด ที่กำหนด |
| จบ | สิ้นสุดการทำงานของโปรแกรม ปิดช่องสัญญาณอินพุต/เอาต์พุตที่เปิดอยู่ และหยุดเสียงทั้งหมด |
| เข้า | โหลดและรวมโปรแกรมข้อความธรรมดาจากอุปกรณ์ภายนอก ซึ่งโดยปกติจะมาจากเทปคาสเซ็ตหรือดิสก์ เข้าสู่หน่วยความจำ (ดูรายการ) |
| เอ็กซ์พี | ฟังก์ชันเลขชี้กำลัง |
| สำหรับ | เริ่มลูป for |
| ฟรี | ส่งคืนค่าหน่วยความจำว่างในหน่วยไบต์ |
| รับ | อ่านข้อมูลหนึ่งไบต์จากช่องทาง I/O (ดู PUT) |
| โกซับ | กระโดดไปยังซับรูทีนที่บรรทัดที่กำหนดในโปรแกรม โดยวางที่อยู่สำหรับส่งคืนลงในสแต็ก (ดู POP และ RETURN) |
| GOTOและ GO TO | กระโดดไปยังบรรทัดที่กำหนดในโปรแกรม สามารถละเว้นคำสั่ง GOTO ได้ในประโยคเงื่อนไข "IF ... THEN GOTO ..." |
| กราฟิก | ตั้งค่าโหมดกราฟิก |
| ถ้า | ดำเนินการตามโค้ดโดยขึ้นอยู่กับว่าเงื่อนไขเป็นจริงหรือไม่ |
| ป้อนข้อมูล | ดึงข้อมูลข้อความจากช่องทางอินพุต/เอาต์พุต โดยปกติจะเป็นข้อมูลจากแป้นพิมพ์ (ค่าเริ่มต้น) เทปคาสเซ็ตหรือดิสก์ |
| อินท์ | ส่งคืนค่าปัดเศษลงของตัวเลข |
| เลน | ส่งคืนความยาวของสตริง |
| อนุญาต | กำหนดค่าให้กับตัวแปร สามารถละคำว่า LET ได้ |
| รายการ | แสดงรายการ (ทั้งหมดหรือบางส่วน) ของโปรแกรมที่จะแสดงผลบนหน้าจอ (ค่าเริ่มต้น) เครื่องพิมพ์ ดิสก์ เทปคาสเซ็ตหรืออุปกรณ์ภายนอกอื่นๆ (ดูที่ปุ่ม ENTER) |
| โหลด | โหลด โปรแกรม ที่แปลงเป็นโทเค็นแล้วจากอุปกรณ์ภายนอก โดยปกติจะเป็นเทปคาสเซ็ตหรือดิสก์ (ดู บันทึก) |
| ค้นหา | จัดเก็บค่าสีเชิงตรรกะหรืออักขระ ATASCII ณ พิกัดที่กำหนด |
| บันทึก | ส่งคืนค่าลอการิทึมธรรมชาติของตัวเลข |
| แอลพรินต์ | สั่งพิมพ์ข้อความไปยังเครื่องพิมพ์ (สามารถได้ผลลัพธ์เดียวกันโดยใช้คำสั่ง OPEN, PRINT และ CLOSE) |
| ใหม่ | ลบโปรแกรมและตัวแปรทั้งหมดออกจากหน่วยความจำ โดยจะทำงานโดยอัตโนมัติก่อนคำสั่ง LOAD หรือ CLOAD |
| ต่อไป | ดำเนินการต่อในรอบถัดไปของลูป FOR |
| ไม่ | การปฏิเสธเชิงตรรกะ |
| บันทึก | ส่งคืนตำแหน่งปัจจุบันบนช่องสัญญาณ I/O |
| บน | คำสั่งgotoหรือ gosub ที่คำนวณได้ - ทำการกระโดดไปยังตำแหน่งที่กำหนดโดยอิงจากค่าของนิพจน์ |
| เปิด | เริ่มต้นใช้งานช่องสัญญาณ I/O |
| หรือ | การแยกตรรกะ |
| พาย | ส่งคืนตำแหน่งของตัวควบคุมแบบพาย |
| แอบดู | ส่งคืนค่าที่อยู่ในหน่วยความจำที่ระบุ |
| พล็อต | วาดจุดที่พิกัดที่กำหนด |
| จุด | ตั้งค่าตำแหน่งปัจจุบันบนช่องสัญญาณ I/O |
| โผล่ | กำหนดค่าให้กับตำแหน่งในหน่วยความจำ |
| โผล่ | ลบที่อยู่ส่งคืนของซับรูทีนออกจากสแต็ก (ดู GOSUB และ RETURN) |
| ตำแหน่ง | กำหนดตำแหน่งของเคอร์เซอร์กราฟิก |
| พิมพ์และ ? | เขียนข้อความไปยังช่องทาง I/O; โดยปกติจะเป็นหน้าจอ (ค่าเริ่มต้น), เครื่องพิมพ์, เทปคาสเซ็ตหรือดิสก์ (ดู LPRINT และ INPUT) |
| พีทีริก | แสดงว่าปุ่มกดถูกกดหรือไม่ |
| ใส่ | เขียนข้อมูลหนึ่งไบต์ไปยังช่องสัญญาณ I/O (ดู GET) |
| แรด | สลับฟังก์ชันตรีโกณมิติเพื่อคำนวณในหน่วยเรเดียน (ดู DEG) |
| อ่าน | อ่านข้อมูลจากคำสั่ง DATA |
| REM | ทำเครื่องหมายความคิดเห็นในโปรแกรม |
| คืนค่า | กำหนดตำแหน่งที่จะอ่านข้อมูลจากคำสั่ง DATA |
| กลับ | สิ้นสุดซับรูทีน โดยจะเปลี่ยนเส้นทางไปยังบรรทัดถัดจากคำสั่ง GOSUB ที่ "เรียก" (ดู GOSUB และ POP) |
| อาร์เอ็นดี | ส่งคืนเลขสุ่มเทียม |
| วิ่ง | เริ่มการทำงานของโปรแกรม โดยอาจโหลดโปรแกรมจากอุปกรณ์ภายนอก (ดู LOAD) |
| บันทึก | เขียน โปรแกรม ที่แบ่งเป็นโทเค็นแล้วลงในอุปกรณ์ภายนอก โดยปกติจะเป็นเทปคาสเซ็ตหรือดิสก์ (ดู LOAD) |
| ตั้งค่าสี | แปลงสีเชิงตรรกะให้เป็นสีเชิงกายภาพ |
| เอสจีเอ็น | ส่งคืนค่าเครื่องหมายของตัวเลข |
| บาป | ส่งคืนค่าไซน์ของตัวเลข |
| เสียง | เริ่มหรือหยุดเล่นเสียงบนช่องสัญญาณเสียง (ดูที่ END) |
| สแควร์ | ส่งคืนค่ารากที่สองของจำนวน |
| สถานะ | ส่งคืนสถานะของช่องสัญญาณ I/O |
| ขั้นตอน | ระบุค่าเพิ่มขึ้นที่ใช้ในลูป FOR |
| ติด | ส่งคืนค่าตำแหน่ง ของจอยสติ๊ก |
| หยุด | หยุดโปรแกรมชั่วคราว เพื่อให้สามารถกลับมาทำงานต่อได้ในภายหลัง (ดู CONT) |
| สไตรค์ | แสดงว่าไกจอยสติ๊กถูกกดหรือไม่ |
| สตร. | แปลงตัวเลขเป็นรูปแบบสตริง |
| แล้ว | ระบุคำสั่งที่จะดำเนินการหากเงื่อนไขในคำสั่ง IF เป็นจริง |
| ถึง | ระบุเงื่อนไขที่จำกัดในคำสั่ง FOR |
| กับดัก | ตั้งค่าให้ข้ามไปยังบรรทัดโปรแกรมที่กำหนดหากเกิดข้อผิดพลาด (TRAP 40000 จะยกเลิกคำสั่งนี้) |
| ยูเอสอาร์ | เรียกใช้รูทีนรหัสเครื่อง โดยอาจมีพารามิเตอร์เพิ่มเติม |
| VAL | ส่งคืนค่าตัวเลขของสตริง |
| เอ็กซ์ไอโอ | รูทีนการรับส่งข้อมูลทั่วไป (ตั้งแต่คำสั่ง "เติมข้อมูลลงบนหน้าจอ" ไปจนถึง "เปลี่ยนชื่อไฟล์" และ "ฟอร์แมตดิสก์") |
หมายเหตุ
- ^ AppleSoft BASIC ใช้พื้นที่หน่วยความจำตั้งแต่ $D000 ถึง $F7FF รวมทั้งหมด 10240 ไบต์
- ^ Commodore BASIC ใช้พื้นที่หน่วยความจำหลักสองส่วน คือ $A000 - $BFFFและ $E000 - $ E4D2 [ 8 ]
- ^ Applesoft ใช้หน่วยความจำตั้งแต่ $D000ถึง $F7FFรวมถึงไลบรารี FP [ 9 ]
- ^แม้ว่าโครงสร้างต้นไม้การวิเคราะห์จะถูกนำมาใช้ในรูปแบบของตาราง ซึ่งจริงๆ แล้วเป็นเพียงรายละเอียดการใช้งานเท่านั้น
- ^ 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
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ อาตาริ บาซิก
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...
