首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Commodore BASIC中是否可以在DATA语句字符串中存储任何PETSCII字符?

在Commodore BASIC中是否可以在DATA语句字符串中存储任何PETSCII字符?
EN

Stack Overflow用户
提问于 2017-02-03 02:35:06
回答 3查看 307关注 0票数 4

我想将一些二进制数据作为DATA语句存储在Commodore 64上的BASIC程序中。为了节省空间,我更喜欢以字符串形式存储,而不是以数字序列形式存储。

是否可以在DATA语句中存储从CHR$(0)CHR$(255)的任何字符,或者某些字符不能以这种方式表示?无法在DATA语句中表示的完整字符列表(如果有)是什么?

我特别想知道CHR$(0)、双引号(")、换行符和回车符。如果可以表示这些,如何表示?

EN

回答 3

Stack Overflow用户

发布于 2017-08-25 15:23:14

简短的回答是:不。您说了原因:字符串中的双引号字符会生成一个错误:没有引号转义字符。对于其他值,您可以在数据语句字符串中插入内容,然后再也不使用C64 BASIC编辑器接触这些行,但是双引号会杀死您。

我还没有想出的最好、最快的解决方案是穷人的魔法。它是这样工作的:

  1. 获取每个二进制字节。
  2. 对于每个十六进制数,取二进制值并加上48。
  3. 现在您在集合中有两个字符(0,1,2,3,4,5,6,7,8,9,:,;,<,=,>,?)表示一个字节。
  4. 这两个字符进入数据语句字符串。

颠倒这个过程来读取它们,并将它们戳出来。

票数 1
EN

Stack Overflow用户

发布于 2017-05-09 17:54:21

有一种方法可以做到这一点,你可以直接POKE字节到内存中。但是这有点长,你需要知道你要把字节POKE到哪里。不过,您可以取消在DATA语句中使用大量零的需要,如下所示:

代码语言:javascript
复制
    0 FOR I=0 TO 7
    1 READ A(I)
    2 NEXT I
    3 PRINT A(0), A(4)
63998 PRINT "FIN"
63999 DATA ,,,,4,,7,8

我们知道2048是基本区域的开始(除非你移动了指针),所以猜测一下,可以这样做:

代码语言:javascript
复制
    0 DATA" "," "," "," "," "

然后在2050年或2051年左右使用你能识别的字符进行POKE,然后列出它。如果你看到加在双引号之间的字符,那么你就赢了。当然,然后您需要计算引号之间的每个位置。完成后,重新编号您的行号并继续编程。我不确定如何在双引号之间POKE一个双引号,因为据我所知,在Commodore BASIC中没有转义字符串的概念。

不过,我个人只会使用数字。

票数 0
EN

Stack Overflow用户

发布于 2017-03-11 05:48:48

我在C64程序中存储了下面的data语句,每个元素都是一个字符串。我选择了CHR$(172) - CHR$(190),以及两个以上的CHR$(4000)。

代码语言:javascript
复制
100 data "©","ª","«","¬"," ","®","¯","¶","¼","½","¾","™","ח","⦁"

我运行了以下代码:

代码语言:javascript
复制
10 FOR X=1 TO 14
20 READ A$
30 PRINT ASC(A$)
40 NEXT X
100 data "©","ª","«","¬"," ","®","¯","¶","¼","½","¾","™","ח","⦁"

结果好坏参半。我知道它不会识别任何超过255的值。但CHR$(173)打印为32:

代码语言:javascript
复制
RUN
 169 
 170 
 171 
 172 
 32 
 174 
 175 
 182 
 188 
 189 
 190 

?SYNTAX  ERROR IN 100
READY.

我拒绝了这个程序,我的数据语句现在看起来像这样:

代码语言:javascript
复制
100 DATA "©","ª","«","¬"," ","®","¯","¶","¼","½","¾",""","",""

使用另一种基本的方言,一种更现代的方言,在过去几年中写的,这是我172到190的CHR$的输出:

代码语言:javascript
复制
The ASCII value of A is:  65 
The ASCII value of A should be 65, like it is on a PC.
If it is not 65, then a conversion table must be loaded
and the results converted to match the PC so code

CHR$ VALUES
—————————————————

CHR$(169)=©  CHR$(170)=ª  CHR$(171)=«  CHR$(172)=¬  CHR$(173)=­        
CHR$(174)=®  CHR$(175)=¯  CHR$(176)=°  CHR$(177)=±  CHR$(178)=²  
CHR$(179)=³  CHR$(180)=´  CHR$(181)=µ  CHR$(182)=¶  CHR$(183)=·  
CHR$(184)=¸  CHR$(185)=¹  CHR$(186)=º  CHR$(187)=»  CHR$(188)=¼  
CHR$(189)=½  CHR$(190)=¾  

对于C64 BASIC,要么必须使用数字字符串,要么必须使用十六进制值并存储实际字符,就像我在原始C64 DATA语句中所做的那样。

我不知道您认为可以节省多少空间,但最多也就是最少,因为C64不能超过CHR$(255)。

然而,我使用的另一种方言是SmartBASIC,我使用的是CHR$(20480)。

我希望这能帮到你。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42009814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档