GW-BASIC

**GW-BASIC** là một biến thể của ngôn ngữ lập trình BASIC được phát triển bởi Microsoft từ IBM BASICA, ban đầu viết cho Compaq. GW-BASIC không giống với Microsoft/IBM BASICA, nhưng là một tập tin thực thi hoàn toàn khép kín và không cần ROM BASIC. Nó được tích hợp với hệ điều hành MS-DOS trên các máy tính tương thích với IBM PC của Microsoft. Microsoft cũng đã bán một trình biên dịch BASIC, BASCOM, tương thích với GW-BASIC, cho các chương trình cần tốc độ cao hơn. Ngôn ngữ phù hợp cho các trò chơi đơn giản, các chương trình kinh doanh và tương tự. Kể từ khi nó được bao gồm trong hầu hết các phiên bản của MS-DOS thì nó cũng trở thành một cách để giảm chi phí cho nhiều lập trình viên tham vọng tìm hiểu các nguyên tắc cơ bản của lập trình máy tính. Với việc phát hành MS-DOS 5.0, vị trí của GW-BASIC cuối cùng đã được thực hiện bởi QBasic, phần thông dịch của trình biên dịch QuickBASIC có sẵn riêng biệt.

## Tính năng và đặc điểm
IBM BASICA và GW-BASIC là các bản chuyển trực tiếp từ BASIC-80 của Microsoft (còn được gọi là MBASIC) được thiết kế cho các máy 8080/Z80, nhưng với các tính năng bổ sung dành riêng cho phần cứng PC của IBM. Các tính năng phổ biến của BASIC-80 và BASICA/GW-BASIC bao gồm:
* Lệnh CLS để xóa màn hình
* Biến số chính xác kép (MBF 64 bit)
* Hỗ trợ số nguyên thực sự
* Câu lệnh PRINT USING cho đầu ra hiển thị được định dạng
* LPRINT để xuất ra máy in
* Vòng lặp WHILE....WEND
* Khả năng lưu các chương trình theo ba định dạng (mã nhị phân được mã hóa thông thường, ASCII hoặc định dạng mã thông báo "được bảo vệ" không thể LIST được)
* "Ok" làm dấu nhắc BASIC
* Câu lệnh DEFtype để đặt tất cả các biến bắt đầu bằng các ký tự được chỉ định làm một loại, loại bỏ sự cần thiết phải đặt hậu tố loại sau chúng
* Hàm INKEY$ để đọc các lần nhấn phím
* Một trình soạn thảo nâng cao bao gồm các câu lệnh để sắp xếp lại các dòng chương trình và xóa chúng trong các khối
* Hỗ trợ số thập lục phân (được thực hiện bằng cách viết &H trước số)
* Câu lệnh REM có thể được viết tắt là '
* Các câu lệnh có văn bản được trích dẫn (ví dụ: PRINT) không yêu cầu dấu ngoặc kép thứ hai ở cuối trừ khi các đối số khác theo sau
* Hướng dẫn IN/OUT cho I/O
* Các tính năng bẫy lỗi
Ngược lại, BASIC-80/BASICA/GW-BASIC không cho phép xử lý các dòng như trong phiên bản 6502 (không cần space trên một dòng chương trình).

Các chương trình MBASIC không sử dụng các câu lệnh PEEK/POKE sẽ chạy dưới trình thông dịch GW-BASIC. BASICA đã thêm một số lượng lớn các tính năng cho máy tính IBM như âm thanh, đồ họa và các lệnh bộ nhớ.

Microsoft đã không cung cấp một phiên bản chung của MS-DOS cho đến khi ra phiên bản 3.20 vào năm 1986; trước đó, tất cả các biến thể của hệ điều hành đều là OEM. Tùy thuộc vào OEM, BASIC được phân phối dưới dạng BASICA.EXE hoặc GWBASIC.EXE. BASICA.EXE không nên nhầm lẫn với IBM BASICA, với tên tập tin luôn có đuôi là.COM. Một số biến thể của BASIC có các tính năng bổ sung để hỗ trợ một loại máy cụ thể (ví dụ, các phiên bản AT&T và Tandy của DOS bao gồm một GW-BASIC đặc biệt hỗ trợ khả năng đồ họa và âm thanh nâng cao của chúng).

Phiên bản đầu tiên của GW-BASIC là phiên bản có trong Compaq DOS 1.13 (được phát hành với Compaq Portable vào năm 1983) và tương tự với IBM BASICA 1.10. Nó sử dụng các khối điều khiển tập tin có nguồn gốc từ CP/M để truy cập đĩa và không hỗ trợ các thư mục con. Các phiên bản sau này đã thêm tính năng này và đồ họa được cải thiện cũng như các khả năng khác.

GW-BASIC 3,20 (1986) thêm hỗ trợ đồ họa EGA (không có phiên bản BASICA hoặc GW-BASIC nào có hỗ trợ VGA) và có hiệu lực phiên bản mới nhất được phát hành trước khi nó được thay thế bởi QBasic.

Người mua card đồ họa Hercules nhận được phiên bản đặc biệt của GW-BASIC trên đĩa tiện ích của card được gọi là HBASIC và hỗ trợ đồ họa đơn sắc 720×348 của nó (các phiên bản BASICA/GW-BASIC khác không hỗ trợ đồ họa Hercules và chỉ có thể hiển thị đồ họa trên card đó thông qua việc sử dụng mô phỏng CGA của bên thứ ba, chẳng hạn như SIMCGA).

GW-BASIC có một môi trường phát triển tích hợp dựa trên dòng lệnh (IDE) dựa trên Dartmouth BASIC. Sử dụng các phím di chuyển con trỏ, mọi dòng hiển thị trên màn hình đều có thể được chỉnh sửa. Nó cũng bao gồm các phím tắt chức năng ở cuối màn hình. Giống như các phiên bản vi tính đầu của BASIC, GW-BASIC thiếu nhiều cấu trúc cần thiết cho lập trình có cấu trúc như biến cục bộ và các chương trình GW-BASIC được thực thi tương đối chậm, bởi vì nó là một ngôn ngữ lập trình thông dịch. Tất cả các dòng chương trình phải được đánh số; tất cả các dòng không đánh số được coi là các lệnh trong chế độ trực tiếp sẽ được thực thi ngay lập tức. Các tệp nguồn của chương trình thường được lưu dưới định dạng nén nhị phân với mã thông báo thay thế các lệnh, với một tùy chọn để lưu dưới dạng văn bản ASCII.

Môi trường dòng lệnh GW-BASIC có lệnh `RUN, LOAD, SAVE, LIST` cho chương trình hiện tại, hoặc thoát khỏi hệ điều hành; các lệnh này cũng có thể được sử dụng như các câu lệnh chương trình. Có rất ít sự hỗ trợ cho lập trình có cấu trúc trong GW-BASIC. Tất cả các câu lệnh điều kiện `IF/THEN/ELSE` phải được viết trên một dòng, mặc dù câu lệnh WHILE/WEND có thể nhóm nhiều dòng. Các hàm chỉ có thể được định nghĩa bằng cách sử dụng dòng DEF FNf (x) =  (ví dụ, DEF FNLOG (cơ sở, số) = LOG (số)/LOG (cơ sở)). Kiểu dữ liệu của các biến có thể được xác định bằng một ký tự ở cuối tên biến: A$ là một chuỗi các ký tự, A% là một số nguyên, v.v... Các nhóm biến cũng có thể được đặt thành loại mặc định dựa trên chữ cái đầu tiên tên của họ bằng cách sử dụng các câu lệnh DEFINT, DEFSTR, v.v. Loại mặc định cho các biến không khai báo không được xác định bởi các câu lệnh gõ như vậy, là số thực độ chính xác đơn (MBF 32 bit).

## Chú thích

## Liên kết ngoài
* Classic Basic Games Page , tài nguyên cho các trò chơi BASIC và các chương trình khác
* Back to BASICs, một trang tài nguyên BASIC khác
* 
* Hướng dẫn sử dụng GW-BASIC
* Gary Beene's Information Center  về BASIC, với các mốc thời gian cho các phương ngữ DOS, Windows và BASIC
* GW-BASIC - Gee Whiz! Trang web của Neil C. Obremski dành cho GW-BASIC.
* PC-BASIC - bộ giả lập GW-BASIC cho các hệ điều hành hiện đại.