diff --git a/head.asm b/head.asm new file mode 100644 index 0000000..f21dc37 --- /dev/null +++ b/head.asm @@ -0,0 +1,22 @@ +.alias cblk $66 ; 边框 +.alias csnk $a0 ; 像素 +.alias csps $20 ; 空白 + +.alias go_u $55 ; 上 +.alias go_d $5f ; 下 +.alias go_l $1d ; 左 +.alias go_r $32 ; 右 +.alias st_g $a0 ; 开始/暂停 +.alias ed_g $20 ; 结束 + +.data zp +.space d 1 ; 方向 值定义如上 +.space c 1 ; 🐍长度 最大255 最小0 +.space s 2 ; 得分 小端序 + +.data +.org $0400 +.space title 40 +.space field 960 ; 蛇所在屏幕内存区 + +.text \ No newline at end of file diff --git a/main.asm b/main.asm index b1f5618..259af73 100644 --- a/main.asm +++ b/main.asm @@ -1,21 +1,7 @@ .outfile "snake.prg" .require "platform/c64_0.oph" .require "platform/c64kernal.oph" - -.alias cblk $a6 - -.alias go_u $55 ; 上 -.alias go_d $5f ; 下 -.alias go_l $1d ; 左 -.alias go_r $32 ; 右 -.alias st_g $a0 ; 开始/暂停 -.alias ed_g $20 ; 结束 - -.data zp -.space d 1 ; 方向 值定义如上 -.space c 1 ; 🐍长度 最大255 最小0 -.space s 2 ; 得分 小端序 -.text +.require "head.asm" main: .scope @@ -28,21 +14,26 @@ main: ; init 初始化界面、变量 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .macro init - lda #147 ;清屏 + lda #147 ; 清屏 jsr chrout - lda #$ff + lda #$00 sta s - lda #$ff - sta s + 1 - jsr printscore + lda #$00 + sta s + 1 ; 初始化分数为0 + jsr printscore ; 打印分数 + lda #1 + sta field + 11*38 + 19 ; 初始化蛇位置 + sta c ; 初始化蛇长为1 + jsr printfield ; 打印蛇,包括边框 .macend .require "printscore.asm" .require "print16.asm" +.require "printfield.asm" .require "print.asm" .checkpc $A000 ; text段边界 -.data zp ; 零页段边界 +.data zp ; 零页段边界 .checkpc $80 .data .checkpc $D000 ; data段边界 \ No newline at end of file diff --git a/printfield.asm b/printfield.asm new file mode 100644 index 0000000..a8e2715 --- /dev/null +++ b/printfield.asm @@ -0,0 +1,42 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; printfield 打印蛇,包括边框 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +printfield: +.scope +.data zp +.space _ptr 2 +.text + ldx #23 ; i代表行数,不含边框 + lda #field ; 取地址高8位 + sta _ptr + 1 + ldy #0 +* lda #cblk + sta (_ptr), y ; 打印左边框 + lda #39 + jsr _addptr + lda #cblk + sta (_ptr), y ; 打印右边框 + lda #1 + jsr _addptr + dex + bne - + lda #cblk + ldy #40 + dec _ptr +* sta (_ptr), y ; 打印底边 + dey + bne - + ldx #0 + jsr plot + rts + +_addptr: + clc + adc _ptr + bcc + + inc _ptr + 1 +* sta _ptr + rts +.scend diff --git a/snake.prg b/snake.prg index 656e92a..d9b986c 100644 Binary files a/snake.prg and b/snake.prg differ