喝什么解渴| 尼姑庵是什么意思| 吃什么通便| 剔除是什么意思| 左胳膊发麻是什么原因| 肾虚和肾亏有什么区别| mil是什么单位| 狗脚朕什么意思| 梦到狗是什么征兆| 婴儿吓着了有什么症状| 手足口病什么症状| 鳞状上皮内低度病变是什么意思| 痦子是什么| 神经节是什么| tct和hpv有什么区别| 红细胞压积偏高是什么意思| 大小脸是什么原因造成的| 为什么一热身上就痒| 天上的星星为什么会发光| 顾虑是什么意思| 麻药叫什么名字| 有脚气是什么原因引起的| 清静是什么意思| 为什么不建议割鼻息肉| 尿道炎吃什么消炎药| 灰指甲有什么特效药可以治好| 皮肤瘙痒用什么药最好| 犒劳是什么意思| 大器晚成什么意思| 大本营是什么意思| 类风湿和风湿有什么区别| 红色配什么颜色| 蛇形分班是什么意思| 孩子晚上磨牙是什么原因| 嗓子不舒服做什么检查| 脸上长痤疮用什么药| 蒲公英长什么样| 壁虎是什么动物| 嘴唇一圈发黑是什么原因造成的| 主动脉硬化吃什么药好| 脱肛是什么原因造成的| 神经性皮炎是什么原因引起的| 春晓的晓是什么意思| 女人怕冷是什么原因| 散光有什么症状| 宝宝喝什么奶粉好| 爆单是什么意思| 心智不成熟是什么意思| 芳华什么意思| 十月一是什么星座| 女人腰疼是什么原因引起的| ca199偏高是什么意思| 耳朵发烫是什么征兆| 儿童用什么牙膏最好可以保护牙齿| 老花眼视力模糊有什么办法解决吗| 什么病不能吃秋葵| 球拍状胎盘对胎儿有什么影响| 玻璃用什么材料做的| 锁骨是什么骨| 吃什么对胃好| 什么时候洗头是最佳时间| 擦汗的表情是什么意思| 天眼是什么意思| 双币信用卡是什么意思| 塔利班是什么| 睡久了头疼是什么原因| 包皮红肿用什么药| 盖碗适合泡什么茶| 头脑灵活是什么生肖| 咳痰带血是什么原因| 为什么一直放屁| 特长写什么| 肉身成圣是什么意思| 黄连素又叫什么名字| 怕什么来什么| 出汗臭是什么原因| 吾日三省吾身是什么意思| 心慌什么感觉| 酒是什么| 卓诗尼牌子是什么档次| 羊肉与什么食物相克| 吃饭后肚子疼是什么原因| 五月十三是什么星座| pci是什么| 祝好是什么意思| 不动明王是什么属相的本命佛| 下面痒用什么药| 清真不能吃什么| 秒杀是什么意思| ko是什么意思啊| 胃窦炎吃什么药最好| 为什么犹太人聪明| 掉头发是什么原因导致的| 猥琐什么意思| 战略支援部队是干什么的| 怀孕初期吃什么菜| 甲肝戊肝是什么病| 梦见打台球是什么意思| 白蚁吃什么| 赑屃是什么意思| 滋养细胞疾病是什么病| 唇炎去医院挂什么科| 心房颤动是什么意思| lop胎位是什么意思| 五行水多代表什么| gst是什么| 一阵什么| 改姓需要什么手续| 藜麦是什么东西| 霉菌性阴道炎用什么洗液好| 血氯高是什么原因| 坐飞机要什么证件| 蒙蒙的什么| 2028是什么年| 淤血是什么意思| 公举是什么意思啊| 高血压会引起什么并发症| 湿气太重吃什么| 蚊子喜欢什么颜色| 一月九号是什么星座| 建卡需要带什么证件| 水痘疫苗什么时候接种| 拉肚子是什么原因造成的| 盆腔炎吃什么消炎药效果好| acei是什么意思| 肾阳虚吃什么中药| 4.9是什么星座| 1948年属什么生肖| 政协委员是干什么的| 增肌吃什么最好| 红颜什么意思| 死忠粉是什么意思| 熬夜到什么程度会猝死| 女性夜尿多吃什么调理| 就藩什么意思| 6月16是什么星座| 什么时候开始降温| 鸡和什么菜一起烧好吃| 气阴两虚吃什么中成药| 盐袋子热敷有什么好处| 梦见很多虫子是什么意思| 梦见妖魔鬼怪是什么意思| 配裙子穿什么鞋子好看| 一箭双雕是什么生肖| 指甲月牙代表什么| 情劫什么意思| 办慢性病有什么好处| 吃坏东西肚子疼吃什么药| ads是什么意思| 胎盘低置状态是什么意思| 孙悟空叫什么名字| 来忘掉错对来怀念过去是什么歌| 肺气肿吃什么食物好| 生理盐水是什么| 人人有的是什么生肖| 2pcs是什么意思| 中药地龙是什么| 灌肠是什么感觉| 光是什么生肖| 帕金森吃什么药效果好| 牛头不对马嘴是什么意思| 凌晨一点多是什么时辰| 林彪什么时候死的| 八珍胶囊适合什么人吃| 额头上长痘痘是什么原因| 山竹吃了有什么好处| 嬴姓赵氏是什么意思| 咳嗽有什么特效药| 广州为什么叫花城| 梅花三弄是什么意思| 学字五行属什么| 肝内结节是什么意思啊| 随什么随什么| 11月份是什么季节| 理性是什么意思| 不劳而获是什么生肖| 空是什么结构| 小清新是什么意思啊| 黄豆炒什么好吃| 红骨髓是什么意思| 秋葵不能和什么一起吃| 后脑勺出汗是什么原因| 肺动脉高压用什么药| 小孩感冒流鼻涕吃什么药| 拉拉是什么意思| 传说中的狮身人面像叫什么名字| 吃什么补充dha| 美人坯子是什么意思| 喝红糖水有什么好处和坏处| 少一个睾丸有什么影响| 藏拙是什么意思| 九零年属什么生肖| 为什么手臂上有很多很小的点| 艾滋通过什么途径传播| 乌龟不能吃什么| 什么叫易经| 08属什么生肖| 妈妈的爸爸叫什么| 贵妃是什么意思| 肠胃性感冒吃什么药| 国家电网需要什么专业| 大满贯什么意思| 左耳疼痛什么原因引起| 敏感水体是什么意思| 12月28日什么星座| 开颅手术有什么后遗症| aspirin是什么意思| bpo是什么意思| 下肢水肿是什么原因| 血糖高是什么引起的| 女人30如狼40如虎是什么意思| 259是什么意思| 做什么生意| 右手无名指戴戒指什么意思| 舌面有裂纹是什么原因| 为什么要小心AB型血的人| 份量是什么意思| 什么时候跑步最好| 为什么会得淋巴肿瘤| 松子是什么树的果实| 刺身什么意思| 浙江有什么旅游景点| 嘴里发咸是什么原因| 宫颈筛查是检查什么| 血象高是什么意思| 什么驱蚊效果最好| 梅子什么时候成熟| 10月17是什么星座| qa和qc有什么区别| 谌读什么| 千米的字母是什么| 吃什么护肝| 减肥最快的方法是什么| 心里难受想吐是什么原因| 瓠子和什么相克| 低烧吃什么药| 前列腺钙化斑是什么意思| 手指缝里长水泡还痒是什么原因| 反流性食管炎吃什么药最好| 亚瑟士和鬼冢虎的区别是什么| 膝关节咔咔响是什么原因| 三个羊是什么字| 截单是什么意思| 大学体检都检查什么| 做雾化起什么作用| 羊奶粉和牛奶粉有什么区别| 人工流产后可以吃什么| 维生素h的作用及功能主治是什么| 三尖瓣少量反流是什么意思| 尿里加什么能冒充怀孕| 北京市长是什么级别| 肝肿瘤吃什么食物好| 京东京豆有什么用| gdp是什么| 二脚趾比大脚趾长代表什么| 2月7号是什么星座| 镉是什么东西| 颈椎病去医院挂什么科| 蓓字五行属什么| 叶酸是什么| 为什么会做梦| 吓着了有什么症状| 胃有灼热感是什么原因| 美白吃什么| 百度Jump to content

我国气象灾害预警发布时效缩至5—8分钟

From Wikipedia, the free encyclopedia
Integer BASIC
DeveloperSteve Wozniak
First appeared1976; 49 years ago (1976)[1]
PlatformApple I, Apple II
Influenced by
HP BASIC
Influenced
Applesoft BASIC
百度 《昆明东管理处机关工作人员基层兼职实施方案》中明确规定,处、分处机关所有工作人员(含处领导)每年驻站兼职7天,目的是让机关职工更加真切地体会基层工作,提升机关整体工作质量和效率,转变工作作风。

Integer BASIC is a BASIC interpreter written by Steve Wozniak for the Apple I and Apple II computers. Originally available on cassette for the Apple I in 1976, then included in ROM on the Apple II from its release in 1977, it was the first version of BASIC used by many early home computer owners.[2]

The only numeric data type was the integer; floating-point numbers were not supported. Using integers allowed numbers to be stored in a compact 16-bit format that could be more rapidly read and processed than the 32- or 40-bit floating-point formats found in most BASICs of the era. This made it so fast that Bill Gates complained when it outperformed Microsoft BASIC in benchmarks. However, this also limited its applicability as a general-purpose language.[a]

Another difference with other BASICs of the era is that Integer BASIC treated strings as arrays of characters, similar to the system in C or Fortran 77. Substrings were accessed using array slicing rather than string functions. This style was introduced in HP Time-Shared BASIC, and could also be found in other contemporary BASICs patterned on HP, like North Star BASIC and Atari BASIC. It contrasted with the style found in BASICs derived from DEC, including Microsoft BASIC.

The language was initially developed under the name GAME BASIC and referred to simply as Apple BASIC when it was introduced on the Apple I. It became Integer BASIC when it was ported to the Apple II and shipped alongside Applesoft BASIC, a port of Microsoft BASIC which included floating-point support. Integer BASIC was phased out in favor of Applesoft BASIC starting with the Apple II Plus in 1979.

History

[edit]

As a senior in high school, Steve Wozniak's electronics teacher arranged for the leading students in the class to have placements at local electronics companies. Wozniak was sent to Sylvania where he programmed in FORTRAN on an IBM 1130.[4] That same year, General Electric placed a terminal in the high school that was connected to one of their mainframes running their time-sharing BASIC service, which they were heavily promoting at the time. After being given three days of access, the students were asked to write letters on why the school should receive a terminal permanently, but their efforts were ultimately unsuccessful.[1]

Some years later, Wozniak was working at Hewlett-Packard (HP) running simulations of chip designs and logic layout for calculators.[1] HP made major inroads in the minicomputer market with their HP 2000 series machines running a custom timesharing version of BASIC. For approximately $100,000, one could build up a reasonably equipped machine that could support between 16 and 32 users running BASIC programs.[5] While expensive, it was still a fraction of the cost of the mainframe machines[b] and, for heavy users, less than the timesharing services.[c] HP followed this with the HP 9830, a desktop-sized machine for US$10,000 (equivalent to $81,000 in 2024) that also ran BASIC, which Wozniak had access to.[9]

I sniffed the wind and knew that the key to making my computer good (popular) was to include a high-level language and that it had to be BASIC.

Steve Wozniak[1]

In January 1975 the Altair 8800 was announced and sparked off the microcomputer revolution. In March, Wozniak attended the first meeting of the Homebrew Computer Club and began formulating the design of his own computer. One of the most important pieces of software for the Altair, and one of the most heavily pirated, was Altair BASIC from the recently formed Microsoft.[10] Wozniak concluded that his machine would have to have a BASIC of its own, which would, hopefully, be the first for the MOS Technology 6502 processor. As the language needed 4 KB RAM, he made that the minimum memory for the design.[1]

Wozniak's references for BASIC were a copy of 101 BASIC Computer Games and an HP BASIC manual.[1] He did not know that HP's BASIC was very different from the DEC BASIC variety used in 101 Games, which was also the basis of Microsoft BASIC for the Altair. Based on these sources, Wozniak began sketching out a syntax chart for the language. The design initially included floating-point support, but still hoping he might publish the first BASIC on the 6502 and become "a star", he decided to abandon floating-point and write a separate integer math system to save a few weeks programming time.[1]

Wozniak would later describe his language as "intended primarily for games and educational uses".[11] Referring to it throughout development as "GAME BASIC", Wozniak wrote the code by hand, translating the assembler code instructions into their machine code equivalents and then uploading the result to his computer.[12] Without any training on how to write a computer language, he used his HP calculator experience to implement a stack machine to interpret expressions. Once the basic routines were up and running, he worked on the other commands one-by-one in a modular fashion. With every visit to the Homebrew club, he demonstrated a few more features added in the last month.[1]

It was the most satisfying day of my life... I demonstrated Breakout [at Homebrew]-totally written in BASIC... After designing hardware arcade games, I knew that being able to program them in BASIC was going to change the world.

Steve Wozniak[9]
Ad for the Apple I computer noting Apple's policy of providing free or inexpensive software for its computers.

In early 1976 ads for its Apple I computer, Apple Inc made the claims that "our philosophy is to provide software for our machines free or at minimal cost"[13] and "yes folks, Apple BASIC is Free".[14] This was printed shortly after Bill Gates's infamous Open Letter to Hobbyists that suggested that people were robbing him by copying versions of Altair BASIC.[15]

Wozniak had helped Steve Jobs, who worked for Atari, with a redesign of Breakout.[16] At some later point, he decided to see whether one could write the game in BASIC. He added commands to read paddle controllers and over a series of quick edits had a version of the game up and running. To improve its playability, he added a speaker to make clicks when the ball hit things. While showing it to Jobs, Wozniak demonstrated that he could quickly change the colors that his game used, just by altering the source code. Wozniak later wrote that he had proved that "software was much more flexible than hardware", and that he and Jobs realized that "now, anyone could create arcade games without having to design it in hardware."[1]

Wozniak did complete a floating-point library for the 6502 and published it in the August 1976 edition of Dr. Dobb's Journal.[17] This library was later made part of the ROMs for the Apple II.[18] Wozniak began work on back-porting the floating-point code into Apple BASIC, but got sidetracked in the task of designing a floppy disk controller for what became the Disk II. Mike Markkula said the company would go to the Consumer Electronics Show in Las Vegas if the disk system was ready in time, so Wozniak and Randy Wigginton worked on it non-stop through the 1977 holidays.[19]

When he returned to the topic of floating-point in BASIC, Jobs complained it was taking too long. Without Wozniak being aware, the company had already arranged a license with Microsoft to receive their recently completed 6502 version of the Altair code. Examining the MS code, Wozniak decided that it was easier to add graphics support to their code than add floating-point his own BASIC, as the latter required hand-patching of the original machine code while MS's was written in assembler and more easily modified. The development of Apple's BASIC ended in favor of what became Applesoft BASIC. Wozniak later noted, "My biggest disappointment was going to the awful string functions like LEFT$(VAR, 5) and MID$(VAR2,5,3) instead of my own".[19][d]

When the Apple II shipped in the summer of 1977, Integer BASIC was supplied in ROM, while Applesoft BASIC shipped on cassette. This changed with the introduction of the Apple II Plus in 1979, when Applesoft was put in the ROM.[20]

Description

[edit]

Program editing

[edit]

Like most BASIC implementations of the era, Integer BASIC acted as both the language interpreter as well as the line editing environment. When BASIC was running, a > command prompt was displayed where the user could enter statements.[21][e] Unlike later home computer platforms, BASIC was not the default environment when the Apple II started, it normally started in the monitor. BASIC was started by pressing Ctrl+BReturn.[22]

Statements that were entered with leading numbers are entered into the program storage for "deferred execution",[23] either as new lines or replacing any that might have had the same number previously.[24] Statements that were entered without a line number were referred to as commands, and ran immediately.[f] Line numbers could be from 0 to 32767,[25][g] and lines could contain up to 128 characters.[27]

Integer BASIC also included the AUTO command to automatically enter line numbers at a given starting number like AUTO 100, adding 10 to the last number with every new line. AUTO 300,5 would begin numbering at line 300 by fives; 300, 305, etc. Automatic numbering was turned off by entering MAN.[28]

One interesting feature of the editor was that a section of the screen could be set aside as the "window", where live updates took place. This was normally the entire screen, but it could be limited to a smaller area by POKEing values into memory locations 32 through 35.[29] This feature could be used to create an editable text area while the rest of the screen was in graphics mode.[30]

Debugging

[edit]

As in most BASICs, programs were started with the RUN command, and as was common, could be directed at a particular line number like RUN 300.[31] Execution could be stopped at any time using Ctrl+C[32] and then restarted with CONtinue, as opposed to the more typical CONT.[33]

For step-by-step execution, the TRACE instruction could be used at the command prompt or placed within the program itself. When it was turned on, line numbers were printed out for each line the program visited. The feature could be turned off again with NOTRACE.[34]

A somewhat unusual feature was the DSP (for "display") command. When encountered in a program, from that point on any changes to a variable's value would be displayed. For instance, DSP X would display the value of X every time it changed, along with the line number where the change occurred.[35] As with TRACE, DSP was turned off with NODSP.[26]

Variable names

[edit]

Where Dartmouth BASIC and HP-BASIC limited variable names to at most two characters (either a single letter or a letter followed by one digit), and where MS-BASIC allowed a letter followed by an optional letter or digit (ignoring subsequent characters), Integer BASIC was unusual in supporting any length variable name (e.g., SUM, GAMEPOINTS, PLAYER2). The only caveat was that variable names could not contain reserved words; for example, THISCOLOR and COLORFUL were invalid variable names because they contained the keyword COLOR, a system command.[36] Additionally, lines were limited to 128 characters, so variable names could not exceed that length.[27]

Mathematics

[edit]

Integer BASIC, as its name implies, uses integers as the basis for its math package. These were stored internally as a 16-bit number, little-endian (as is the 6502). This allowed a maximum value for any calculation between -32767 and 32767; although the format could also store the value -32768, BASIC could not display that number. Calculations that resulted in values outside that range produced a >32767 ERR.[37]

Infix operators included + (addition), - (subtraction), * (multiplication), / (division), MOD (remainder) and exponent using the ^ character. Binary operators included AND, OR and NOT. Binary comparisons included the standard set of =, >, <, >=, <=, <> and the HP-inspired #, which was equivalent to <>.[38]

Only single-dimension arrays were allowed, limited in size only by the available memory.[39] Mathematical functions were sparse; only ABS (absolute value), SGN (sign) and RND (random number) were supported.[40] In contrast to MS-derived versions, where the parameter was ignored and RND always returned a value 0..<1, Integer BASIC used the parameter; RND(6) returned an integer from 0 to 5.[41]

Strings

[edit]

Integer BASIC's string handling was based on the system in HP BASIC. This treated string variables as arrays of characters which had to be DIMed prior to use. This is similar to the model in C[42] or Fortran 77.[43] This is in contrast to MS-like BASICs where strings are an intrinsic variable-length type.[44] Before MS-derived BASICs became the de facto standard, this style was not uncommon; North Star BASIC[45] and Atari BASIC[46] used the same concept, as did others.

Strings in Integer Basic used a fixed amount of memory regardless of the number of characters used within them, up to a maximum of 255 characters.[47] This had the advantage of avoiding the need for the garbage collection of the heap that was notoriously slow in MS BASIC[h] but meant that strings that were shorter than the declared length resulted in wasted memory.

Substring access was provided through array slicing syntax. For instance, PRINT A$(0,5) printed the first six characters of A$, characters 0 through 5.[49][49][i] Concatenation was provided using the same system, A$(5)="ABC" replaced any characters starting at position 5 with the string "ABC".[50] This contrasts with the DEC/MS-style string handling which uses string functions like MID$ to access substrings and + for concatenation.[51][j]

As many of the features that would be provided by string functions were instead provided by array slicing, the selection of string functions was reduced. LEN returned the length of a string[47] and ASC returned the ASCII numeric code for the first letter in a string.[52] It lacked an equivalent of the CHR$ that returned the ASCII character with a given numeric code.[53]

Graphics and sound

[edit]

When launched, the only game controller for the Apple was the paddle controller, which had two controllers on a single connector. The position of the controller could be read using the PDL function, passing in the controller number, 0 or 1, like A=PDL(0):PRINT A, returning a value between 0 and 255.[54][k]

The Apple machines did not include dedicated sound hardware, only a simple "beeper". Producing sounds was accomplished by PEEKing the memory-mapped location of the speaker, -16336.[l] Repeatedly PEEKing that value produced tones, and the manual suggested using a mathematical expression to do this, like S=PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336).[56]

Support for graphics was more detailed. Graphics mode was turned on with the GR statement and off with TEXT.[57] Drawing was modal and normally started by issuing a command to change the color, which was accomplished by setting a pseudo-variable; COLOR=12 would set the drawing color to 12, light green. One could then PLOT 10,10 to produce a single spot of that color,[58] HLIN 0,39 AT 20 to draw a horizontal line at row 20 that spanned the screen, or VLIN 5,15 AT 7 to draw a shorter vertical line down column 7.[59] A=SCRN X,Y returned the color of the screen at X,Y.[52][m]

Input/output

[edit]

Integer BASIC lacked any custom input/output commands, and also lacked the DATA statement and the associated READ. To get data into and out of a program, the input/output functionality was redirected to a selected card slot with the PR#x and IN#x, which redirected output or input (respectively) to the numbered slot. From then on, data could be sent to the card using conventional PRINT commands and read from it using INPUT.[52]

Other notes

[edit]

Integer BASIC included a TAB feature, which positioned the cursor on a given column from 0 to 39. It differed from the versions found in most BASICs in that it was a command with a following number, as opposed to a function with the value in parentheses; one would move the cursor to column 10 using TAB 10 in Integer BASIC[60] whereas in MS this would be PRINT TAB(10). Additionally, the VTAB command worked similar to TAB but added vertical spaces instead of horizontal. For unexplained reasons, in this case the coordinates were from 1 to 24 rather than 0 to 23.[61]

Integer BASIC included a POP command to exit from loops.[52] This popped the topmost item off the FOR stack. Atari BASIC also supported the same command,[62] while North Star BASIC used EXIT.[63]

The Integer BASIC ROMs also included a machine code monitor, "mini-assembler", and disassembler to create and debug assembly language programs. Wozniak hand-assembled the monitor as the Apple II's first program, then used it to write Integer BASIC.[64][65][2]

Reserved words

[edit]

Apple BASIC

[edit]

Apple BASIC had the following commands:[66]

AUTO val1, val2
CLR [CLEAR]
DEL val1, val2
LIST val1, val2
RUN val1
SCR [SCRATCH / NEW]
HIMEM = expr
LOMEM = expr
(LET) var = expr
INPUT (prompt,) var1, var2 ...
PRINT item(s)
TAB expr
FOR var = expr1 TO expr2 STEP expr3
NEXT var
IF expr THEN statement
IF expr THEN line number
GOTO expr
GOSUB expr
RETURN
DIM var1(expr1), var2(expr2) ...
REM text
END
POKE expr1, expr2
CALL expr
Functions: ABS(), SGN(), PEEK(), RND(), LEN()

Integer BASIC

[edit]

Integer BASIC added the following:[67][68]

COLOR = expr
CON [CONTINUE]
DSP
GR
HLIN expr1, expr2 AT expr3
MAN
NEW [replaces SCR]
NOTRACE
PLOT expr1, expr2
POP
TEXT
TRACE
VLIN expr1, expr2 AT expr3
Function: ASC(), PDL(), SCRN(X,Y)

Implementation

[edit]

Integer BASIC read the lines typed in by the user from a buffer and ran them through a parser which output a series of tokens. As part of this process, simple syntax errors were detected and listed. If the parsing was successful, the line number (if present) was converted from ASCII decimal format into a 16-bit integer and any keywords into a 7-bit integer token.[64]

Some keywords were represented by multiple tokens; for instance, where Microsoft BASIC had one token for the keyword PRINT, Integer BASIC had three tokens: one if the keyword was followed by no arguments, one if followed by an arithmetic expression, and one if followed by a string literal.[69]

Numeric literals, like the value 500, were converted into their 16-bit (two-byte) binary representation, in this case, $01F4 hexadecimal. To indicate this was a value and not a keyword, a single byte between $B0 and $B9 was inserted in front of the two-byte value.[n] String literals, like "HELLO WORLD" were instead converted by setting the high bit of each character so that A was stored as $C1. Variable names were converted in the same fashion, with the letters converted to have their high-bit turned on, and any digits in the name represented by the corresponding $B0 through $B9, so that the variable A5 would be tokenized as $C1B5.[64]

If the line was entered without a line number, the code was then executed directly from the buffer. If it had a line number, it was copied from the buffer into the program storage area.[64]

The runtime interpreter used two stacks for execution: one for statement keywords and the other for evaluating the parameters. Each statement was given two priorities: one that stated where it should occur in a multi-step operation, like a string of mathematical operations to provide order of operations, and another that suggested when evaluation should occur, for instance, calculating internal values of a parentheses formula. When variables were encountered, their name was parsed and then looked up in the variable storage area. If it was not found, it was added to the end of the list. The address of the variable's storage, perhaps freshly created, was then placed on the evaluation stack.[64]

ROM details

[edit]

SWEET16

[edit]

In addition to Integer BASIC, the Apple ROMs contained a custom assembler language known as SWEET16. SWEET16 is based on bytecodes that run within a simple 16-bit virtual machine. This model was used so memory could be addressed via indirect 16-bit pointers and 16-bit math functions calculated without the need to translate those to the underlying multi-instruction 8-bit 6502 code. The entire virtual machine was written in only 300 bytes. Code can call SWEET16 by issuing a subroutine call, and then return to normal 6502 code when the 16-bit operations are complete.[70]

SWEET16 was not used by the core BASIC code, but was later used to implement several utilities. Notable among these was the line renumbering routine, which was included in the Programmer's Aid #1 ROM, added to later Apple II models and available for user installation on earlier examples.[71]

Floating point

[edit]

Although Integer BASIC contained its own math routines, the Apple II ROMs also included a complete floating-point library located in ROM memory between $F425-$F4FB and $F63D-$F65D. The source code was included in the Apple II manual. BASIC programs requiring floating-point calculations could CALL into these routines.[72]

Performance

[edit]

Because Integer BASIC processed more of the original source code into tokens, the runtime was faster than versions that required additional runtime parsing. For comparison, Tiny BASIC tokenized only the line number,[73] while MS BASICs tokenized only the keywords. So for instance, while Integer BASIC would convert the line 100 GOTO 200 entirely into tokens that could be immediately read and performed, in MS BASIC only the line number and GOTO would be tokenized, the "200" was left in its original ASCII format and had to be re-parsed into a 16-bit integer every time the line was encountered.[74]

Additionally, working solely with integer math provides another major boost in speed. This is due both to the smaller 16-bit format requiring fewer memory accesses, as well as removing the need to move the floating-point decimal after calculations. As many computer benchmarks of the era were small and often performed simple math that did not require floating-point, Integer BASIC trounced most other BASICs.[o]

On one of the earliest known microcomputer benchmarks, the Rugg/Feldman benchmarks, Integer BASIC was well over twice as fast as Applesoft BASIC on the same machine.[76] In the Byte Sieve, where math was less important but array access and looping performance dominated, Integer BASIC took 166 seconds while Applesoft took 200.[77] A review of Galfo Systems' Integer BASIC Compiler found that it produced code that is about 1.5 to eight times faster than compiled Applesoft BASIC, ten times faster than interpreted Integer BASIC, and 15 times faster than interpreted Applesoft.[78] Integer BASIC did not appear in the Creative Computing Benchmark, which was first published in 1983, by which time the language was no longer included with Apple computers.[79]

The following test series, taken from both of the original Rugg/Feldman articles,[76][75] show Integer's performance relative to the MS-derived BASIC on the same platform.

System CPU BASIC Test 1 Test 2 Test 3 Test 4 Test 5 Test 6 Test 7
Apple II 6502 @ 1 MHz Integer BASIC 1.3 3.1 7.2 7.2 8.8 18.5 28.0
Apple II 6502 @ 1 MHz Applesoft BASIC 1.3 8.5 16.0 17.8 19.1 28.6 44.8

Here is a summary of what each test did:

  • Test 1: for/next loop to 1000.
  • Test 2: if/then loop with compare to 1000.
  • Test 3: same as 2 with added multiplication, division, addition subtraction by same variable.
  • Test 4: same as 3 with added multiplication, division, addition subtraction by constants.
  • Test 5: same as 4 with added subroutine call.
  • Test 6; same as 5 with added inner loop.
  • Test 7: same as 6 with added table population.

Sample code

[edit]

The following is a version of Breakout written in the 1977 version of Integer BASIC for the Apple II, which was listed in the Apple II Mini Manual.[80] There are a number of known bugs in this version.[81]

The program starts by setting the display to TEXT and then CALL -936 to clear the screen. Lines 20 through 27, and the associated subroutines at line 100 and 200, are the color selection code Wozniak demonstrated for Jobs. Line 30 sets up the text window with POKE 32,20[p] and then uses a series of COLOR and VLIN statements to draw the playfield and the score display in the text window. The entire main loop runs from line 40 through 90 with associated subroutines. Another large amount of code near the end of the program is concerned with printing the final score. Other notes of interest include the # (not-equal) comparisons on line 20, the production of a high-pitch sound using a string of PEEKs on line 65 compared to a lower-pitched tone using a loop on line 70, and the mix of graphics and text on a single display.[q]

5 TEXT: CALL -936: VTAB 4: TAB 10: PRINT "*** BREAKOUT GAME ***": PRINT
7 PRINT "  OBJECT IS TO DESTROY ALL BRICKS WITH 5 BALLS": FOR N=1 TO 7000: NEXT N
10 DIM A$(20),B$(20): GR: PRINT: INPUT "HI, WHAT'S YOUR NAME? ",A$:A=1:B=13:C=9:D=6:E=15: PRINT "STANDARD COLORS,"; A$;
20 INPUT "? ",B$: IF B$#"N" AND B$#"NO" THEN 30: FOR I=0 TO 39: COLOR=I/2*(I<32): VLIN 0,39 AT I
25 NEXT I: POKE 34,20: PRINT: PRINT: PRINT: FOR I=0 TO 15: VTAB 21+I MOD 2: TAB I+I+1: PRINT I;: NEXT I: POKE 34,22: VTAB 24: PRINT: PRINT "BACKGROUND";
27 GOSUB 100: A=E: PRINT "EVEN BRICK";: GOSUB 100: B=E: PRINT "ODD BRICK";: GOSUB 100: C=E: PRINT "PADDLE";: GOSUB 100: D=E : PRINT "BALL";: GOSUB 100
30 POKE34,20:COLOR=A:FORI=0TO39:VLIN0,39ATI:NEXTI:FOR I=20TO34STEP2:TAB I+1:PRINT I/2-9;:COLOR=B:VLIN 0,39 AT I:COLOR=C:FOR J=I MOD 4 TO 39 STEP4
35 VLIN J,J+1 AT I: NEXT J,I: TAB 5: PRINT "SCORE = 0": PRINT: PRINT: POKE 34,21: S=0: P=S: L=S: X=19: Y=19: X=19
40 COLOR=A:PLOTX,Y/3:X=19:Y=RND(120):V=-1:W=RND(5)-2:L=L+1:IFL>5THEN140:TAB6:PRINT"BALL #";L:PRINT:FORI=1TO100:GOSUB200:NEXTI:M=1:N=0
50 J=Y+W: IF J>=0 AND J<120 THEN 60: W=-W: J=Y: FOR I=1 TO 6: K=PEEK(-16336): NEXT I
55 IF PEEK(-16287)>127 THEN SW=1-SW
60 I=X+V: IF I<0 THEN 400: GOSUB 200: COLOR=A: K=J/3: IF I>39 THEN 70: IF SCRN(I,K)=A THEN 90: IF I THEN 120: N=N+1: V=(N>9)+1: W=(K-P)*2-5:M=1
65 Z = PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336): GOTO 90
70 FOR I=1 TO 6: M=PEEK(-16336): NEXT I: I=X: M=0
80 V=-V
90 PLOT X,Y/3: COLOR=E: PLOT I,K: X=I: Y=J: GOTO 50
99 PRINT "INVALID.  REENTER";
100 INPUT " COLOR (0 TO 15)",E: IF E<0 OR E>15 THEN 99: RETURN
120 IF M THEN V=ABS(V): VLIN K/2*2,K/2*2+1 AT I: S=S+I/2-9: VTAB 21: TAB 13: PRINT S
123 Q = PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)
124 IF S<720 THEN 80
130 PRINT "CONGRATULATIONS, YOU WIN.": GOTO 150
140 PRINT "YOUR SCORE OF ";S;" IS ";: GOTO 141+S/100
141 PRINT "TERRIBLE!": GOTO 150
142 PRINT "LOUSY.": GOTO 150
143 PRINT "POOR.": GOTO 150
144 PRINT "FAIR.": GOTO 150
145 PRINT "GOOD.": GOTO 150
146 PRINT "VERY GOOD.": GOTO 150
147 PRINT "EXCELLENT.": GOTO 150
148 PRINT "NEARLY PERFECT."
150 PRINT "SAME COLORS";: GOTO 20
200 IF SW THEN 220: Q=(PDL(0)-5)/6: IF Q<0 THEN Q=0
205 IF Q>=34 THEN Q=34: COLOR=D: VLIN Q,Q+5 AT 0: COLOR=A: IF P>Q THEN 210: IF Q THEN VLIN 0,Q-1 AT 0: P=Q: RETURN
210 IF P=Q THEN RETURN: IF Q#34 THEN VLIN Q+6,39 AT 0: P=Q: RETURN
220 Q=(Y-5)/3+RND(3)*SGN(W)*(X<10 AND V<0): IF Q<0 THEN Q=0: GOTO 205
400 FOR I=1 TO 80: Q=PEEK(-16336): NEXT I: GOTO 40

Notes

[edit]
  1. ^ Or as Bill Gates put it, "more powerful BASIC... using floating point".[3]
  2. ^ An IBM 370/155 cost over $2 million in 1970 (equivalent to $16,000,000 in 2024).[6]
  3. ^ Tymshare charged about $10 per hour (equivalent to $81 in 2024) for accessing their systems,[7] while smaller services could be found for about $5.[8]
  4. ^ The string handling was not "his own", but the same system used by HP BASIC.
  5. ^ To make it clear which BASIC was running, Applesoft used the ] prompt.
  6. ^ In what MS referred to more descriptively as "immediate mode".
  7. ^ Helmers says the lowest line number is 1.[26]
  8. ^ And completely broken in some versions.[48]
  9. ^ HP also allowed [ and ] in place of ( and ).
  10. ^ It also contrasts with Dartmouth BASIC which used the CONVERT command to convert a string into an array of ASCII values which the user then manipulated and converted back to string format with a second CONVERT.
  11. ^ The manual suggests, but does not outright state, that the actual range of values is less than 0 to 255.[54]
  12. ^ The negative number is a side-effect of the integers being stored in signed format, so any memory location over 32767 appeared as a negative value in BASIC.[55]
  13. ^ Note the odd syntax of the SCRN, which is technically a function because it returns a value, but does not use function-like syntax which would be A=SCRN(X,Y).
  14. ^ The first digit of the original value was used to select a value from 0 to 9, so in this example, the token would be $B5 for the first digit of 500.
  15. ^ Bill Gates complained about this, stating that it was unfair to compare Integer BASIC to a "real" BASIC like MS.[75]
  16. ^ Meaning the text starts at line 20 of 24 lines on the screen, leaving four lines of text at the bottom.
  17. ^ For a list of the various CALLs, PEEKs and POKEs that performed common operations on the Apple II, see Peeks, Pokes, Calls And Programming Notes, Charles Turley, 15 December 1996.

References

[edit]

Citations

[edit]
  1. ^ a b c d e f g h i Wozniak 2014.
  2. ^ a b Weyhrich 2001.
  3. ^ Rugg, Tom; Feldman, Phil (October 1977). "BASIC timing comparisons… revised and updated". Kilobaud. pp. 20–25.
  4. ^ Baum, Allan (18 July 2016). "Oral History of Allen Baum" (Interview). Interviewed by David Brock. p. 12.
  5. ^ "Passing the 10-year mark". MEASURE Magazine. Hewlett Packard. October 1976.
  6. ^ Cooney, Michael. "The (mostly) cool history of the IBM mainframe". ARN.
  7. ^ Bourne, Charles; Hahn, Trudi Bellardo (August 2003). A History of Online Information Services, 1963–1976. MIT Press. p. 387. ISBN 9780262261753.
  8. ^ Barry, Tim (27 April 1981). "Back to BASIC". InfoWorld. p. 7.
  9. ^ a b Williams & Moore 1984, p. A71.
  10. ^ Fisk, Nathan (2009). Understanding Online Piracy. ABC-CLIO. p. 14. ISBN 9780313354748.
  11. ^ Wozniak 1977.
  12. ^ Weyhrich 2001, The [Integer] BASIC, which we shipped with the first Apple II's, was never assembled — ever. There was one handwritten copy, all handwritten, all hand-assembled..
  13. ^ "The Apple 1 Project".
  14. ^ "Apple I Computer Ad". 30 November 2009.
  15. ^ Bunnell, David (September 1975). "Across the Editor's Desk". Computer Notes. 1 (4). Albuquerque NM.: MITS: 2. Archived from the original on March 23, 2012.
  16. ^ "Classic Gaming: A Complete History of Breakout". GameSpy. Archived from the original on August 13, 2013. Retrieved April 19, 2010.
  17. ^ Raskin, Roy; Wozniak, Steven (August 1976). "Floating Point Routines for the 6502". Dr. Dobb's. pp. 17–19.
  18. ^ Apple II Reference Manual. Apple Computer. January 1978. pp. 94–95.
  19. ^ a b Wozniak 2018.
  20. ^ Hertzfeld 1985.
  21. ^ Raskin 1978, p. 11.
  22. ^ Raskin 1978, p. 12.
  23. ^ Raskin 1978, p. 46.
  24. ^ Raskin 1978, pp. 49–55.
  25. ^ Raskin 1978, p. 48.
  26. ^ a b Helmers 1978, p. 24.
  27. ^ a b Raskin 1978, p. 118.
  28. ^ Raskin 1978, pp. 65–67.
  29. ^ Raskin 1978, p. 124.
  30. ^ Wozniak 1977, "This mixed mode provides a 40 by 40 color graphics grid plus four lines of scrolling text at the bottom of the screen.".
  31. ^ Raskin 1978, p. 100.
  32. ^ Raskin 1978, p. 15.
  33. ^ Raskin 1978, p. 52.
  34. ^ Raskin 1978, p. 107.
  35. ^ Raskin 1978, pp. 100, 101.
  36. ^ Raskin 1978, p. 38.
  37. ^ Raskin 1978, p. 27.
  38. ^ Raskin 1978, p. 61.
  39. ^ Raskin 1978, p. 94.
  40. ^ Raskin 1978, p. 40,120.
  41. ^ Raskin 1978, p. 40.
  42. ^ "Strings". learn-c.org.
  43. ^ Brooks, Steve. "Characters & Strings in Fortran" (PDF). University of Hawaii.
  44. ^ "Integer, Floating Point and String Variables". C64 Programmer's Manual. Commodore.
  45. ^ North Star BASIC version 6 (PDF). North Star Corporation. 1977. Archived from the original (PDF) on 2025-08-06. Retrieved 2025-08-06.
  46. ^ The ATARI BASIC Reference Manual. Atari Inc. 1980. Archived from the original on 2025-08-06. Retrieved 2025-08-06.
  47. ^ a b Raskin 1978, p. 89.
  48. ^ "Create your own Version of Microsoft BASIC".
  49. ^ a b Raskin 1978, p. 88.
  50. ^ Raskin 1978, p. 92.
  51. ^ altair 8080 basic manual (PDF). MITS. April 1977. p. 30.
  52. ^ a b c d Raskin 1978, p. 120.
  53. ^ Mini 1977, p. 17.
  54. ^ a b Raskin 1978, p. 36.
  55. ^ Mini 1977, p. 18.
  56. ^ Raskin 1978, p. 84.
  57. ^ Raskin 1978, p. 31.
  58. ^ Raskin 1978, p. 32.
  59. ^ Raskin 1978, p. 33.
  60. ^ Raskin 1978, p. 73.
  61. ^ Raskin 1978, p. 74.
  62. ^ Atari BASIC Reference Manual (PDF). Atari. 1983. p. 25.
  63. ^ North Star BASIC version 6 (PDF). North Star Corporation. 1977. p. 8. Archived from the original (PDF) on 2025-08-06. Retrieved 2025-08-06.
  64. ^ a b c d e Wozniak 1977, p. 42.
  65. ^ Helmers 1978, p. 18.
  66. ^ "PRELIMINARY APPLE BASIC USERS MANUAL". October 1976.
  67. ^ "APPLE II BASIC PROGRAMMING MANUAL". 1978.
  68. ^ "APPLE II REFERENCE MANUAL" (PDF).
  69. ^ Paul R. Santa-Maria. "Apple II Integer Basic Disassembly" (PDF). Retrieved 2025-08-06.[permanent dead link]
  70. ^ Wozniak 1977, p. 43.
  71. ^ Apple Programmers Aid (PDF). Apple. 1978.
  72. ^ Apple II Reference Manual (PDF). January 1978. pp. 94–95.
  73. ^ Allison, Dennis (1976). "Build Your Own BASIC". Dr. Dobb's Journal. Vol. 1, no. 1. p. 11.
  74. ^ Hardiman, Roger. "Altair BASIC 3.2 (4K) - Annotated Disassembly". p. 1.11. Archived from the original on 5 November 2001.
  75. ^ a b Rugg, Tom; Feldman, Phil (October 1977). "BASIC timing comparisons… revised and updated". Kilobaud. pp. 20–25.
  76. ^ a b Rugg, Tom; Feldman, Phil (June 1977). "BASIC Timing Comparisons… information for speed freaks". Kilobaud. pp. 66–70.
  77. ^ Gilbreath, Jim (September 1981). "A High-Level Language Benchmark". Byte. p. 192.
  78. ^ Taylor, Joseph H.; Taylor, Jeffrey S. (September 1982). "A Comparison of Five Compilers for Applesoft BASIC". BYTE. pp. 440–464. Retrieved 2025-08-06.
  79. ^ Ahl, David (November 1983). "Benchmark Comparison Test". Creative Computing. p. 260.
  80. ^ Mini 1977, pp. 65–67.
  81. ^ "Breakout, Annotated". GitHub. 16 August 2021.

Bibliography

[edit]
[edit]
淀粉酶高是什么原因 次第花开是什么意思 人湿气重有什么症状 夏天都有什么花 月亮星座是什么
射手女和什么星座最配 倒斗是什么意思 alan什么意思 梦见买苹果是什么征兆 耳朵为什么老是痒
2018年生肖属什么 终板炎是什么病 什么叫做t 属马的女生和什么属相最配 gtp什么意思
御姐范是什么意思 5月29日是什么星座 细菌性结膜炎用什么眼药水 猪血和鸭血有什么区别 什么的花
吊兰开花有什么兆头hcv7jop6ns9r.cn 反流性食管炎挂什么科hcv8jop3ns7r.cn 肚脐右边按压疼是什么原因hcv8jop5ns2r.cn 15号来月经排卵期是什么时候youbangsi.com 泳字五行属什么hcv8jop6ns5r.cn
河粉为什么叫河粉hcv8jop5ns2r.cn 1975属什么生肖hcv9jop0ns8r.cn 梦见下小雨是什么征兆96micro.com 胸部彩超能检查出什么hcv9jop2ns5r.cn 冷战是什么意思hcv9jop1ns1r.cn
梨和什么一起榨汁好喝96micro.com 去医院看心理挂什么科clwhiglsz.com 3680是什么罩杯hcv8jop4ns6r.cn 痤疮用什么药膏hcv8jop7ns3r.cn 伽利略是什么学家jiuxinfghf.com
普陀山求什么最灵验cl108k.com 脱发应该挂什么科室huizhijixie.com 老放屁什么原因hcv9jop5ns7r.cn rag是什么意思hcv7jop6ns9r.cn 白癜风什么症状hcv9jop0ns9r.cn
百度