我正在写一个小小的爱好c64文本冒险,我已经停在一个非常具体的时刻.也就是说,我不知道如何在引用内引用任何内容.
如何在商品64基本v.2.0中做到这一点.
我发现PET的零页内存映射声称零页面地址范围$00C2..$00D9用于静态数据,例如http://www.classiccmp.org/dunfield/pet/petmem.txt说:
RIDATA 00C2 Cassette Temp (64#00AA) read flags: 0=scan,
1-15=count, $40=load, $80=end of tape marker
RIPRTY 00C3 Cassette Short Cnt (64#00AB): counter of seconds
before tape write / checksum
PNT 00C4-00C5 Pointer: Current Screen Line Address
PNTR 00C6 Cursor Column on Current Line
SAL 00C7-00C8 Pointer: Tape Buffer/ Screen Scrolling
EAL 00C9-00CA Tape End Addresses/End of Program
CMP0 00CB-00CC Tape Timing Constants
QTSW 00CD Flag: Editor in Quote Mode, $00 = NO
BITTS 00CE Cassette Temp …Run Code Online (Sandbox Code Playgroud) 至少运行 VICE 2.4:
PRINT PEEK(53280)
254
POKE 53280,14
PRINT PEEK(53280)
254
Run Code Online (Sandbox Code Playgroud)
很明显,只使用了位#0-#3,并且使用 获得了“正确”值AND 15,但是为什么6510 将高位设置为1?
我正在通过C64仿真器学习6502 micro的装配。当前正在尝试将字符串输出到屏幕。这是我的代码:
processor 6502
org $1000
ldx #$00 ;using x register as column counter
print:
lda message,x;load a with x bit from message
sta $0400,x ;store this bit in row 0 col 0 address
inx ;x++
cpx #$05 ;is x >= 5?
bne print ;if not x >= 5, loop again
rts ;return from program
message dc "HELLO"
hexmsg dc $08,$05,$0c,$0c,$0f
Run Code Online (Sandbox Code Playgroud)
因为我的编辑器(胜利10上的notepad ++)使用类似ascii的字符代码,所以"HELLO"输入message是48 45 4C 4C 4F。这将在屏幕的左上角提供以下输出:

我想这是正确的,请看这里的commodore屏幕代码表。
如果将第6行更改为,lda hexmsg,x那么我将得到确切的字眼HELLO。 …
在真正的Commodore 64(不是模拟器)上的栅格线中是否可以有超过8个精灵?精灵不需要是不同的.
我试图用Commodore BASIC中的"."填充A $(X,X).
这就是我到目前为止所拥有的......但我不确定如何处理ASCII值等等.任何评论?
INPUT A$
FOR I = 0 TO X = DIM A$(X,X)
A$(".",x)
Run Code Online (Sandbox Code Playgroud)
我仍然对PET BASIC的API感到非常困惑......任何建议都会非常感激.
我在 6502 机器上使用以下代码时遇到一些问题:
C000 LDA #$00
C002 STA $FE
C004 LDA #$20
C006 STA $FF
C008 LDY #$08
C00A LDX #$00
C00C DEY
C00D CPY #$FF
C00F BEQ $C01B
C011 LDA ($FE),Y
C013 CMP #$2F
C015 BPL $C00C
C017 INX
C018 JMP $C00C
C01B BRK
Run Code Online (Sandbox Code Playgroud)
练习是存储从地址 2000 开始的数字 2、1 和 4,并说出 A、X 和 Y 的值是多少。
我正在用笔和纸“运行”我的代码,但由于以下原因我陷入了 C011:
LDA ($FE),Y
它将存储在内存地址处的值加载到 A 中,计算方式如下:
$FE值(最初为 00)它是否正确?我错过了什么吗?如果不是,我在哪里使用存储在2000 2001和中的值 …
我看了cbm编程工作室的视频。该演示是使用 C64 模拟器的 hello world。它调用 $AB1E。C64 的内存映射表示输出字符串:输出字符串,由 Accu/Y reg 指示,直到找到 0 字节或引号。
我为 Commodore 8032 寻找了这样的例程。我没有看到它,但内存映射可能不准确。有谁知道basic4 / cbm 8032是否有这样的例程?我知道有一个例程可以打印一个字符,我希望有一个例程可以打印一个字符串。
所以我一直在尝试在6502(针对Commodore 64)中绘制位图。当我将图像加载到地址2000时,它工作正常,但一旦尝试其他地址(例如2400),它就不再工作了。
另外,我使用 CBM prg Studio 作为我的 IDE,使用 Vice 作为我的 C64 模拟器...不知道这是否重要。
这是我的代码
*=$0801
BYTE $0E, $08, $0A, $00, $9E, $20, $28
BYTE $32, $33, $30, $34, $29, $00, $00, $00
*=$0900
; **************************************************************
; VARIABLES
; **************************************************************
TITLE_CHARMEM = $4340
TITLE_COLRMEM = $4728
TITLE_BACKMEM = $4B10
; **************************************************************
; MACROS
; **************************************************************
; **************************
; KEYWAIT
defm KEYWAIT ; Paramters: [Key]
@WAITLOOP
lda #$CB
cmp /1
bne @WAITLOOP
endm
; **************************
; PRINT
defm …Run Code Online (Sandbox Code Playgroud) 我在我的商品64基础项目中得到一个redim'd数组错误
然而,我不是在确定我的2D阵列的尺寸,也不会多次查看代码行!
错误在1140行
谁能帮我吗?
谢谢!
码:
10 print "start"
20 rem: go to line 1100 in order to fill board with "."s because this is
30 rem: the board's initialization
40 gosub 1100
50 rem: looping from i to x allows for horizontal aspect of board to be printed
60 rem: x represents the width dimension of board, in this case, 8
70 for i = 1 to x
80 rem: looping from j to x allows for vertical aspect …Run Code Online (Sandbox Code Playgroud) 我想在commodore 64中编写一个非常简单的基本程序,输入其他基本命令。
这是一个例子:
10 print"list"+chr$(13)
这会打印列表但不会按 Enter 键。
我的期望是得到 list 命令的结果。
我怎样才能实现这个目标?
在Commodore 64内存分配上阅读这个HTML页面,因为我对旧的计算机硬件感兴趣,我偶然发现了表中声称内存地址未使用的单元格.究竟是什么意思?这是否意味着如果你想在该地址中放置一些东西,你可以放任何你想要的东西?困惑,并将欣赏所有的答案.谢谢.
