一个口一个有念什么| 广西狗肉节是什么时候| 尿多尿频是什么原因造成的| 异口同声什么意思| 皮肤属于什么组织| 胃出血有什么症状表现| 万事如意是什么生肖| 曲安奈德是什么药| 麻蛇是什么蛇| 打激素有什么副作用| 螺旋杆菌吃什么药| 衿字五行属什么| 鸢是什么意思| 用什么泡水喝可以降血压| 今年天热的原因是什么| ky什么意思| 卖淫是什么意思| 胃疼吐酸水是什么原因| 人活在世上的意义是什么| 北京五行属什么| 月经来了有血块是什么原因| 检查肠胃挂什么科| hiv阴性是什么意思| 附件是什么意思| 脸肿是什么病| 电测听是什么| 女人性冷淡是什么原因| 白带发黄用什么药| 耸肩是什么意思| 释怀什么意思| 滥竽充数的滥是什么意思| ige是什么| 骨髓捐赠对自己有什么影响没有| 怎么判断脸上是什么斑| 硫脲是什么| 乙酉是什么意思| 什么是中产阶级| 猫舔人是什么意思| 生物医学工程专业学什么| 先下手为强是什么意思| 吐黄痰是什么原因| 尿酸高不能吃什么水果| 晚上咳嗽吃什么药| 人比黄花瘦是什么意思| 冷酷是什么意思| 脸上长疙瘩是什么原因| 紫荆花代表什么生肖| 虫合读什么| 朱顶红什么时候开花| 前列腺增生用什么药好| 宫腔镜检查主要查什么| dc是什么牌子| 两肋胀满闷胀是什么病| 试营业是什么意思| 恶寒是什么意思| 蒙蔽是什么意思| 奴仆宫是什么意思| 金色葡萄球菌最怕什么| 人授和试管有什么区别| 唇珠在面相中代表什么| 外向孤独症是什么意思| 你喜欢我什么| 清洁度iv是什么意思| 电灯是什么时候发明的| 脚干脚裂用什么药| 东山再起是什么生肖| 肝内钙化斑是什么意思| 什么是轻食| 脾囊肿是什么原因引起的| 变态反应科是看什么病的| 胆汁什么颜色| 50岁掉牙齿是什么原因| 梦见蛇是什么预兆| 老年人腿肿是什么原因引起的| 淀粉吃多了有什么危害| 古代宫刑是什么| 燕窝什么时候吃最好| 畏寒是什么意思| 总胆红素高是什么意思| 感冒吃什么消炎药效果好| 跨境电商是做什么的| 爱情的本质是什么| 低压低有什么危害| 头部紧绷感是什么原因| 隔岸观火是什么意思| 什么是肠易激综合征| 肛门是什么| o型血和a型血生的孩子是什么血型| 当所有的人离开我的时候是什么歌| 累的什么| 为什么会得扁平疣| 月经不来吃什么| 吃黑豆有什么好处| oem贴牌是什么意思| 金蝉子是什么佛| 什么是普世价值| 儿童铅超标有什么症状| maxco是什么牌子| 什么3121919Z空间| 月经失调是什么原因引起的| 过敏什么症状| 什么七什么八| 摸鱼是什么意思| 梦见吃梨是什么意思| hold on什么意思| 什么可以变白皮肤| miracle是什么意思| 冰镇情人果是什么水果| 儿童胃肠型感冒吃什么药| 异性缘是什么意思| ct是检查什么的| 月经量少吃什么调理快| 好色是什么意思| 头皮发热是什么原因| 脚气用什么药膏| 口干口臭是什么原因引起的| 沈阳是什么省| 全距是什么意思| 慢性盆腔炎吃什么药| 无以回报是什么意思| 火眼金睛是什么生肖| 血糖高喝什么饮料好| 减肥早餐吃什么最好| 1977年是什么年| 低置胎盘有什么危险| 长生香是什么意思| 五路财神都叫什么名字| 吃什么水果能变白| 吃喝拉撒是什么意思| 父亲节做什么礼物好| 什么是危险期| 1969年什么时候退休| 重庆为什么叫雾都| 目字旁与什么有关| 为什么老打哈欠| 腿抽筋挂什么科| 疲软是什么意思| 2040年是什么年| 天使轮是什么意思| 生米煮成熟饭是什么意思| 国潮是什么| 隐血阴性是什么意思| 什么是标准差| 静心是什么意思| 硬下疳是什么意思| 猫叫是什么原因| 孕妇尿回收是干什么用的| 女性漏尿吃什么药| 喝酒头疼吃什么药| 坐骨神经痛吃什么药好得快| 制动是什么意思| 流口水是什么病的前兆| 糖粉和白糖有什么区别| 喉结不明显的男生是什么原因| 什么可以补肾壮阳| 故友是什么意思| 鼠辈是什么意思| 小米粥和什么搭配最好| 小孩自闭症有什么表现| 指甲上有白点是什么原因| ofd是什么意思| sca是什么意思| 姜枣茶什么季节喝最好| 阿玛尼手表算什么档次| 一只脚面肿是什么原因| 后顶焦度是什么意思| 人得布病什么症状| 晚上吃什么可以减肥| 永加一个日念什么| tat是什么意思| 三文鱼有什么营养| 重阳节吃什么| 腿肿脚肿是什么原因引起的| 蜂王浆有什么功效| 凤尾鱼为什么突然就死| 肺癌吃什么水果| 大夫古代指什么| 做梦梦到大蟒蛇是什么意思| 倒吊人是什么意思| 一心向阳下一句是什么| 巨蟹和什么星座最配| 打马虎眼是什么意思| 慢性扁桃体炎吃什么药| 什么是性上瘾| 1938年属什么生肖| 栀子花什么季节开花| 跛子是什么意思| 鱼香肉丝为什么叫鱼香肉丝| 眼皮浮肿什么原因| 绿色大便是什么原因| 阿根廷讲什么语言| 遭罪什么意思| 荷叶配什么减肥效果好| 咪咪是什么| 凌晨的凌是什么意思| 刚怀孕初期吃什么好呢| 什么是卒中| mb是什么意思| bg什么意思| 怀孕了为什么还会出血| 血沉高是什么病| 有所作为的意思是什么| 什么叫痔疮| 为什么阴道会放气| 肝郁脾虚吃什么药效果最好| 手机充电口叫什么| 梦见蛇是什么意思| 女生安全期是什么时候| 佛家思想的核心是什么| 叶子为什么是绿色的| 舌头根发麻是什么原因| mirror什么意思| 女人喝什么调节内分泌| 黛力新主治什么病| 什么叫真菌| 秘书是干什么的| 三净肉指什么| 婴儿外阴粘连挂什么科| 月经来了头疼是什么原因导致的| 五谷丰登指什么生肖| 希字五行属什么| 厮守是什么意思| 骑乘是什么意思| 属猪适合佩戴什么饰品| 太是什么意思| 胆囊结石有什么影响| pn是什么意思| 头七有什么规矩| 沵是什么意思| 后会无期什么意思| cas是什么| 马跟什么相冲| 世上谁嫌男人丑的前一句是什么| 为什么子宫会下垂| mt指什么| 一天当中什么时候血压最高| 唯有女子与小人难养也什么意思| 为什么没有广东大学| 流产吃什么药| 下海的意思是什么| bj什么意思| 鼻基底用什么填充最好| 什么的妈妈| 甲钴胺不能和什么药一起服用| 拉肚子能吃什么水果| 芙蓉是什么花| 脖子短是什么原因| 汗疱疹擦什么药| 白兰地是什么酒| 啄木鸟包包什么档次| 擦什么能阻止毛发生长| 什么的尾巴长不了歇后语| 病毒感染会有什么症状| 玻尿酸是什么东西| 獭尾肝是什么意思| 癌症有什么症状| 老道是什么意思| 断章取义是什么生肖| 通草是什么| 小便不利是什么意思| 拉肚子拉水吃什么药| 血沉高是什么病| bishop是什么意思| 黑匣子是什么| 百度

看客:迁居香港600天,我爱上了她的素颜

(Redirected from Atom BASIC)
百度 为什么小便是红色的尿

Acorn System BASIC and Atom BASIC are two closely related dialects of the BASIC programming language developed by Acorn Computers for their early microcomputers like the Acorn System 3 and Acorn Atom. Developed in-house, they have a number of significant idiosyncrasies compared to most BASIC dialects of the home computer era.

Acorn System BASIC
DeveloperAcorn Computers
First appeared1979; 46 years ago (1979)
LicenseProprietary
Dialects
Atom BASIC
Influenced
BBC BASIC

In particular, the language lacked statements for many of the machine's internal functions and provided this using direct access and manipulation of memory locations using indirection operators instead of PEEK and POKE. Both also lacked floating-point support, although this could be added with an optional ROM which introduced further idiosyncrasies. System and Atom BASIC differ primarily in that Atom used the same indirection system to provide rudimentary string manipulation, which Standard lacked, and added a small number of new statements for computer graphics.

Most of these oddities were removed when the underlying system was greatly expanded to produce BBC BASIC on the Atom's successor, the BBC Micro. BBC BASIC ROMs were later offered to Atom users.

History

edit
 
Hermann Hauser uses Atom BASIC at the BBC Micro 30th anniversary.

Acorn Computers formed in 1978 and got its start making a series of kit-built and Eurocard-based systems starting with the Acorn System 1 in 1979. They developed Acorn System BASIC for these machines,[1] an integer-only dialect that required only 4 KB of memory in total.[2] The language had a number of implementation details that made it "highly non-standard."[3]

The Atom, introduced in 1980, was built from parts of the System 3 packaged onto a single board. Systems shipped standard with 2 KB of RAM and 8 KB of ROM, which included BASIC and a number of device drivers. Atom BASIC had only a few changes from the System version, adding support for string manipulation and a small number of graphics commands. The Atom was upgradable, with up to 12 KB of RAM in total and an additional 4 KB of ROM that added floating-point support. This used separate functions and operations that worked on them, indicated by the % symbol.[3] This choice of symbol was unfortunate, as Microsoft BASIC used the percent sign to indicate integers, not floating point.[4]

The Atom was on the market for only a short period before Acorn began development of its successor, the Proton. This was initially to be a two-processor unit. The design was still in its earliest stages when a series of events led to it being selected as the basis of the single-CPU BBC Micro.[1] At the time, there were comments that it should definitely not use Acorn's variety of BASIC, which "virtually no other microcomputer can understand" and that "If the new language were based on the Atom's form of BASIC, it would be a disaster."[5]

Ultimately, the BBC system did use those older Acorn-written BASIC variants, but heavily modified. The resulting BBC BASIC was much more similar to Microsoft BASIC and was later offered as an upgrade to the Atom.[6]

Description

edit

As the two dialects are very similar, the following will refer to Atom BASIC primarily and point out differences where they exist.

Program editing

edit

Like most BASICs of the era, Atom BASIC used a line-oriented editor with direct (immediate) and indirect modes. Typing in a statement without a line number performed the operation immediately. Adding a line number instead placed those statements in the stored program. One idiosyncrasy was that while it allowed multiple statements on a single line, the separator between statements was the semicolon[7] instead of the commonly used colon, thus requiring the user to convert that character when typing in programs for other computers.

Intended for use with computer terminals, Acorn BASIC did not support a full-screen editing mode. For contrast, in Commodore BASIC (and many other microcomputer dialects), one can use the cursor keys to move upward into a program listing, make changes on-screen, and then press Return to enter those changes. On the Atom, which had a full-screen display, one could move upward into a listing using the cursor keys, but to edit that text, the Copy key was pressed to copy it to the input area where it could be edited.[8]

Another difference on the Atom was the Break key, which performed a system reset, potentially clearing out the program from memory. To reset this if the key was pressed by mistake, Atom BASIC added the OLD command, which could also be used to reset an accidental NEW. A more minor change was that LIST used comma-separated to and from line numbers instead of the minus sign, LIST 20,40 prints out lines 20 to 40.[9]

The language also had the ability to use line labels instead of numbers for branching. Labels consisted of a single lower-case letter typed immediately after the line number. For instance:[10]

10s PRINT "*"
20 GOTO s

The advantage of this method is that the memory address of the statement is stored in s, meaning that the branch, a GOTO, can move directly to that line without having to search through every line in the program looking for the matching line number.[10] Acorn also allowed any expression to be used to produce the line number for branch targets, like GOSUB 500+(A*10).[11]

Statements

edit

Acorn's primitives were similar to other BASICs of the era, and supported most of the elementary statements like CLEAR, DIM, END, FOR..TO..STEP..NEXT, GOSUB, GOTO, IF..THEN, INPUT, (optional) LET, LIST, LOAD, PRINT, REM, RETURN, RUN, SAVE, STOP.[12] There are a number of common statements that are missing, notably DATA, READ, RESTORE used to store data in a program, ON..GOSUB, ON..GOTO computed branches, and DEF FN for user-defined functions.[a]

To these basics, Acorn added DO..UNTIL for the construction of bottom-tested, expression-based loops. FOR loops are highly optimized by using a direct comparison between their index variable and a constant value that is set only once upon entry into the loop. Another optimization is that the address of the FOR is stored, not the line number, so when the matching NEXT is encountered the program can immediately branch back to the FOR. While FOR is suitable for many loops, when more control is needed, for instance when comparing against a more complex criterion, the IF statement may be used:

500 A=A+1
510 REM additional statements here
600 IF A>10 AND B>100 THEN 500

The downside to this style of loop is that the branch requires the program to be searched through for line 500, which, in a loop, normally happens many times. In large programs, this can introduce significant overhead. Using a DO for this purpose offers higher performance:

500 DO A=A+1
510 REM additional statements here
600 UNTIL A>10 AND B>100

In this case, like the FOR loop, the address of the DO is stored when the loop is entered, allowing the UNTIL to return to the top of the loop immediately without having to scan through the program.[14] Note the special case that the DO can be followed directly by another statement without the semicolon separator being required - the A=A+1 is not part of the DO, it is a separate statement.[15]

Among the more minor additions is the WAIT statement, which paused execution until the next clock tick, every 1?60 of a second. This does not wait for one entire tick, just until the next tick, which may happen immediately.[14] LINK calls a machine language routine,[16] the analog of CALL or SYS in most dialects.[17]

Math, operators and functions

edit

Acorn used 32-bit signed integers for all math,[18] with no standard floating-point support. To handle division, which often returns a fractional part, they added the % operator to return the remainder. For instance, PRINT 7/3 will return 2, while PRINT 7%3 will return 1.[19]

Variable names can consist only of a single letter, A to Z.[20] All double-letter combinations are reserved as arrays, so E was a single value, while EE was an array. All arrays required a DIM statement,[21] it did not assume a dimension of 10 like Microsoft BASICs. At runtime, the only check performed on an array was that the index being passed in was a positive value, so one could read off into memory by passing in values larger than the dimension.[22] It did not support multi-dimensional arrays.[23]

Basic math operations included +, -, *, /, %. It also supported bitwise logic operators, with &, \, : used for AND, OR and XOR, respectively. These operators perform comparisons, so 1 & 0 returns 0. The use of the colon for OR[b] is why the statement separator had to use the semicolon.[24] Note that these are separate from the logical connections found in IF statements, like IF A=1 AND B=0 THEN..., which are also supported.[25]

There were only two math functions, ABS and RND. ABS works as in other BASICs, returning the absolute value of a given input. RND does not, it returns a value between the -ve and +ve maximum integer values. To use this in the conventional form to return a value between 0 and a given positive value, between 0 and 10 for example, one used ABS(RND)%11.[26]

Vectors

edit

Most BASICs of the era used PEEK and POKE to access machine specific functionality that was not built into the language itself. Acorn did not have PEEK and POKE, and used new operators to provide this functionality in an easier-to-use system. The operators were ? and !, the former setting or returning the byte at a given location, and the latter setting or returning a 4-byte "word".[27] For instance, common examples of PEEK in most dialects, like PRINT PEEK(4000), could be accomplished with PRINT ?4000.[28] Most dialects lacked the equivalent of the !.[c] Moreover, the same syntax could be used to set the value in memory, like a POKE, for instance, ?4000=200.[28]

To aid in accessing data arranged in a continual form in memory, like arrays of numbers, the operators could be applied to the right-hand side of a variable. When used in this way, like A?, the system accessed the memory at the variable's location in memory. Any number following the operator was applied as an offset, so for instance, A?100 would return the value of the byte 100 locations after the location of A in memory.[28]

This was often used with another Acorn-only concept, the "vector". Confusingly, these were created using the same DIM commands as an array, but applied to single-letter variables. When the DIM was encountered the system would set aside that many locations at the top of memory, and then move the memory pointer up. This left a block of memory that could then be accessed with the indirection operators. For instance:[28]

10 DIM A(100)
20 PRINT A?10

Which will print the byte value at the 11th location in A (all accesses are zero-indexed).[28] Likewise, one could store values in memory using the same operator applied before the variable name:

!A=123456

This will convert the decimal value 123456 from ASCII into an integer and store it in the memory locations starting at the base location for A.[27]

To aid operation with vectors, Acorn added the pseudo-variable TOP. When the system first started up, it pointed to the first location past the end of the program. Any DIMs were then created at the current value of TOP, and TOP was then updated to the end of the new object. It was possible to create dynamic vectors by directly manipulating TOP.[30]

Strings

edit

Atom BASIC added string support but did not support string variables nor did it have the concept of a string as an atomic type. Instead, the vector system was used to manipulate string data in memory, as ASCII values.[28] To aid this usage, the $ operator converted in-memory values to their ASCII values. This operator continued reading data from memory until it encountered a return, and when writing data to memory, always added a return at the end.[31] So while PRINT ?A would print the single value of the byte at A's location in memory as a number, PRINT $A would read the values starting at that location and print it as a string.[31] For instance:

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

This code may appear very similar to the use of strings in other dialects, although the location of the $ relative to the variable name changes. It is especially similar to those dialects that required a DIM on all strings, like HP Time-Shared BASIC or Atari BASIC. Internally, the operation is very different. In those dialects, A and A$ are two different variables and the $ is, in effect, part of the name. In Acorn, A and $A they are the same variable, and the $ is applying a unary operation to that variable. This also means one can use arrays for strings, like $AA(10), which converts the value in AA(10) to a string.[3]

This concept allows individual characters to be accessed using vector notation. For instance, A?5 would return the ASCII value of the 5th character, 79 for O in this case, while PRINT $A?5 would output "O".[32] There is no way to extract a substring in a single operation, one has to loop over the characters and move them one-by-one. Concatenation is possible by assigning one variable to the end of another, for instance, $A+LEN(A)=$B copies the string B to the end of A.[33]

The language has only two string functions, LEN which looks for the trailing return character and returned the length, and CH to return the ASCII value of a character. CH has an odd format with no parens, so CH"A" would return 65.[32] It is otherwise similar to the more common ASC seen in other dialects.[34]

Another new operator was #, which converted a numeric value into a hexadecimal string. Like $, this could be used anywhere to perform the conversion. For instance, A=#4000 sets the value of A to the decimal value 16384, the location of the screen memory. This was often combined with the $ operator to allow strings to contain unprintable characters, like the "cursor up" character.[8]

Floating point

edit

Floating-point support could be added with the additional 4 KB ROM expansion. This used an expanded 40-bit word size, 32 bits of signed mantissa followed by an 8-bit exponent.[35] This meant the system needed some way to distinguish the data when reading and writing from memory, which was handled in a fashion similar to the string operator, using the % prefix:[35]

 %A=123.45

As the code was contained in a separate 4 KB ROM, it did not modify existing statements like PRINT. Instead, an entirely new set of statements was introduced, including FDIM, FIF, FINPUT, FPRINT, FUNITL. This means, for instance, that one cannot IF A=B if the values are floating point, one must instead FIF A=B THEN.... An integer value can be converted to float using the FLT, and float to integer using the float operator, %.[27]

The ROM also included a much larger variety of math functions, including ABS, ACS, ASN, ATN, COS, DEG, EXP, FLT, HTN, LOG, PI, RAD, SGN, SIN, SQR, STR, TAN, VAL.[36] STR converted a floating-point number into a string, as was the case for STR$ in other dialects, but in this case, the string was written to memory and the function returned the address where it was stored. As the string required storage long enough to hold it, this was often accomplished using TOP. For instance:

 STR PI, TOP
 PRINT $TOP
 TOP=TOP-LEN(TOP)

This converts the value of the pseudo-variable PI to a string starting at memory location TOP, prints the string using $TOP, and then abandons that memory.[37]

Input/output

edit

PRINT and INPUT mostly worked as in other dialects. One oddity came about because the colon and semicolon were already used for other purposes, leaving only the comma to separate fields. To print values with no spaces between them, the values were listed with a space character between them, like PRINT A B C, a format that was also allowed on many other dialects although rarely used. This alone would not cause numbers to be printed in compact format, because they are normally printed with spaces on the right to make each one 8 characters wide This could be adjusted by changing the value in the @ pseudo-variable.[38] A newline was printed with a single quote, PRINT "HELLO" ' "WORLD".[27] COUNT returns the cursor column, similar to POS in most dialects.[39]

The default storage device for the Atom was a compact cassette system. Each file was stored as a series of blocks, each of which contained a header with the filename.[40] Files saved with SAVE THISFILE could be read back in with LOAD THISFILE, whilst *CAT listed the names of the files on the cassette as it read past their headers.[41]

Arbitrary data could be opened for reading using FIN or writing with FOUT, both of which returned a numeric file handle. Files were closed with SHUT. Data was read or written in numeric format using GET, PUT, as single bytes with BGET, BPUT, and as strings using SGET, SPUT. The EXT returned the length of the file, while PTR returned or set the current pointer in the file, [16] the number of bytes read or written so far.[42] If the floating-point ROM was present, it added FGET, FPUT.[36]

For instance:

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

Will use the BPUT to write a series of bytes, 88s, until the user presses Escape to stop the program. They can then be read back in (after manually rewinding the tape) using:[43]

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

The dollar sign tells the system to convert the incoming binary data to string format, so in this case, the output will be a series of X's, not 88's.[43] It might seem that SGET could be used instead of BGET, but this would attempt to continue reading from the file until it saw a return character, which in this example had not been written.[44]

Graphics support

edit

The Atom had rudimentary bitmap graphics and Atom BASIC added a number of commands to support it. CLEAR cleared the screen, MOVE moved the graphical cursor to the given X,Y location, and DRAW drew a line from the current location to the provided X,Y.[45]

The floating-point ROM also included support for colour graphics with the addition of the COLOUR statement. Calling COLOUR with a parameter 0 through 3, sets the subsequent output to that colour. On a black-and-white display, the colours were shown as shades of grey.[46]

Notes

edit
  1. ^ A good source for what was already considered the standard for BASICs of the microcomputer era is the introduction to BASIC Computer Games, which introduces the statements it uses and speaks of exceptions to "normal BASIC".[13]
  2. ^ Likely because it looks like a vertical bar, which is used in most math texts for OR.
  3. ^ Various advanced dialects like Turbo-BASIC XL included commands like DPEEK for "double peek", returning a 16-bit value. These are similar in concept to !.[29]

References

edit

Citations

edit
  1. ^ a b Gazzard 2016, p. 22.
  2. ^ Oddy.
  3. ^ a b c Lien 1981, p. 425.
  4. ^ Lien 1981, p. 396.
  5. ^ BBC 1981, p. 662.
  6. ^ Fruits 1982, p. 11.
  7. ^ Johnson Davies 1979, p. 14.
  8. ^ a b Johnson Davies 1979, p. 65.
  9. ^ Johnson Davies 1979, p. 7.
  10. ^ a b Johnson Davies 1979, p. 25.
  11. ^ Johnson Davies 1979, p. 26.
  12. ^ Johnson Davies 1979, pp. 3–4.
  13. ^ Ahl, David (1978). BASIC Computer Games. Workman. p. XII.
  14. ^ a b Johnson Davies 1979, p. 37.
  15. ^ Johnson Davies 1979, p. 35.
  16. ^ a b Lien 1981, p. 427.
  17. ^ Lien 1981, p. 43.
  18. ^ Johnson Davies 1979, p. 67.
  19. ^ Johnson Davies 1979, p. 11.
  20. ^ Johnson Davies 1979, p. 12.
  21. ^ Johnson Davies 1979, p. 45.
  22. ^ Johnson Davies 1979, p. 50.
  23. ^ Johnson Davies 1979, p. 51.
  24. ^ Johnson Davies 1979, p. 15.
  25. ^ Johnson Davies 1979, p. 30.
  26. ^ Johnson Davies 1979, p. 24.
  27. ^ a b c d Lien 1981, p. 426.
  28. ^ a b c d e f Johnson Davies 1979, p. 53.
  29. ^ Fetzer, Ron (1985). Expanded Turbo-BASIC XL Documentation (PDF).
  30. ^ Johnson Davies 1979, p. 46.
  31. ^ a b Johnson Davies 1979, p. 58.
  32. ^ a b Johnson Davies 1979, p. 59.
  33. ^ Johnson Davies 1979, p. 61.
  34. ^ Lien 1981, p. 45.
  35. ^ a b Johnson Davies 1979, p. 162.
  36. ^ a b Johnson Davies 1979, p. 161.
  37. ^ Johnson Davies 1979, p. 163.
  38. ^ Johnson Davies 1979, p. 13.
  39. ^ Lien 1981, p. 73.
  40. ^ Johnson Davies 1979, p. 10.
  41. ^ Johnson Davies 1979, p. 9.
  42. ^ Johnson Davies 1979, p. 151.
  43. ^ a b Johnson Davies 1979, p. 8.
  44. ^ Johnson Davies 1979, p. 152.
  45. ^ Johnson Davies 1979, p. 28.
  46. ^ Johnson Davies 1979, p. 167.

Bibliography

edit
孕囊是什么样的图片 没事找事是什么意思 小ck是什么牌子 小孩病毒性感冒吃什么药效果好 所什么无什么
什么药止咳最好 附属是什么意思 早上为什么不能洗澡 收缩压和舒张压是什么 抗链球菌溶血素o偏高是什么原因
蛇肉吃了有什么好处 什么是流水 阳痿是什么 为什么不娶养猫的女人 馨是什么意思
荷叶又什么又什么 尿频吃什么药 肚脐下面是什么部位 变化不著是什么意思 春宵一刻值千金什么意思
吃饱了胃胀是什么原因hcv8jop8ns5r.cn 弟弟的孩子叫姐姐什么hcv9jop6ns4r.cn 饭后散步有什么好处hcv8jop2ns6r.cn 火麻是什么植物hcv8jop1ns0r.cn 蜻蜓为什么点水hcv8jop0ns0r.cn
1014是什么星座hcv9jop0ns7r.cn 腹部胀痛什么原因hcv7jop5ns5r.cn 菊花什么时候扦插最好hcv7jop4ns5r.cn 夜明珠代表什么生肖hcv8jop4ns3r.cn 头疼是为什么hcv8jop2ns0r.cn
岚字五行属什么hcv7jop5ns2r.cn 皮肤疖是什么病luyiluode.com 貂蝉原名叫什么hcv8jop5ns6r.cn 迷津是什么意思yanzhenzixun.com 为什么一吃辣的就拉肚子hcv9jop8ns1r.cn
羊跟什么生肖最配hcv9jop0ns1r.cn 大姨妈一直不干净是什么原因gysmod.com 玉佛寺求什么最灵验hcv7jop9ns1r.cn 卯木代表什么aiwuzhiyu.com 排卵试纸什么时候测最准确zhongyiyatai.com
百度