SPO600 스트링 랩 옵션 2: 색상 선택기
소개
안녕 내 친구, string lab의 두 번째 부분에 다시 오신 것을 환영합니다. 이 실습에서는 2개의 프로그램을 만들고 6502 어셈블리 언어를 사용하여 파트 2로 분할하기로 결정했습니다. 첫 번째 부분에서는 더하기 계산기를 만들었고 지금 읽고 있는 내용은 이 실습의 두 번째 부분입니다. 이 부분에서는 색상 선택기를 만들기로 했습니다. 이 프로그램은 사용자가 키 입력을 사용하여 오른쪽 화면에서 색상을 선택할 수 있도록 하고 프로그램은 화면에 특정 색상을 인쇄합니다.
단계
암호
define SCINIT $ff81 ; initialize/clear screen
define CHROUT $ffd2 ; output character to screen
define COLOUR $10
define COLOUR_INDEX $11
define POINTER $40
define POINTER_H $41
define UP_KEY $80
define DOWN_KEY $82
lda #$00
sta COLOUR
sta COLOUR_INDEX
jsr initializePrint
getKey:
lda $ff
sty $ff
cmp #UP_KEY
beq decrementKey
cmp #DOWN_KEY
beq incrementKey
jmp getKey
decrementKey:
lda COLOUR
cmp #$01
bpl decrementColour
jmp getKey
decrementColour:
dec COLOUR
jsr initializePrint
jsr initializePaint
jmp getKey
incrementKey:
lda COLOUR
cmp #$0f
bmi incrementColour
jmp getKey
incrementColour:
inc COLOUR
jsr initializePrint
jsr initializePaint
jmp getKey
initializePrint:
jsr SCINIT
ldy #$00
writeTitle:
lda title,y
beq titleDone
jsr CHROUT
iny
bne writeTitle
titleDone:
lda #$00
sta COLOUR_INDEX
startColour:
ora #$00
ldy #$00
colourName:
jsr selectedColour
beq afterWriting
jsr highlightLine
jsr CHROUT
iny
bne colourName
afterWriting:
inc COLOUR_INDEX
lda COLOUR_INDEX
cmp #$10
bne startColour
selectedColour:
lda COLOUR_INDEX
cmp #$00
beq printColour0
cmp #$01
beq printColour1
cmp #$02
beq printColour2
cmp #$03
beq printColour3
cmp #$04
beq printColour4
cmp #$05
beq printColour5
cmp #$06
beq printColour6
cmp #$07
beq printColour7
cmp #$08
beq printColour8
cmp #$09
beq printColour9
cmp #$0a
beq printColour10
cmp #$0b
beq printColour11
cmp #$0c
beq printColour12
cmp #$0d
beq printColour13
cmp #$0e
beq printColour14
cmp #$0f
beq printColour15
rts
printColour0:
lda colour0,y
rts
printColour1:
lda colour1,y
rts
printColour2:
lda colour2,y
rts
printColour3:
lda colour3,y
rts
printColour4:
lda colour4,y
rts
printColour5:
lda colour5,y
rts
printColour6:
lda colour6,y
rts
printColour7:
lda colour7,y
rts
printColour8:
lda colour8,y
rts
printColour9:
lda colour9,y
rts
printColour10:
lda colour10,y
rts
printColour11:
lda colour11,y
rts
printColour12:
lda colour12,y
rts
printColour13:
lda colour13,y
rts
printColour14:
lda colour14,y
rts
printColour15:
lda colour15,y
rts
highlightLine:
ldx COLOUR_INDEX
cpx COLOUR
beq highlight
ora #$00
rts
highlight:
ora #$80
rts
initializePaint:
lda #$00 ; set a pointer at $40 to point to $0200
sta POINTER
lda #$02
sta POINTER_H
ldy #$00
lda COLOUR
draw_screen:
sta ($40), y ; set pixel
iny ; increment index
bne draw_screen ; continue until done the page
inc $41 ; increment the page
ldx $41 ; get the page
cpx #$06 ; compare with 6
bne draw_screen ; continue until done all pages
rts
title:
dcb "L","i","s","t",32,"o","f",32,"C","o","l","o","u","r","s",":",13
dcb 00
colour0:
dcb "B","l","a","c","k",13
dcb 00
colour1:
dcb "W","h","i","t","e",13
dcb 00
colour2:
dcb "R","e","d",13
dcb 00
colour3:
dcb "C","y","a","n",13
dcb 00
colour4:
dcb "P","u","r","p","l","e",13
dcb 00
colour5:
dcb "G","r","e","e","n",13
dcb 00
colour6:
dcb "B","l","u","e",13
dcb 00
colour7:
dcb "Y","e","l","l","o","w",13
dcb 00
colour8:
dcb "O","r","a","n","g","e",13
dcb 00
colour9:
dcb "B","r","o","w","n",13
dcb 00
colour10:
dcb "L","i","g","h","t",32,"r","e","d",13
dcb 00
colour11:
dcb "D","a","r","k",32,"g","r","e","y",13
dcb 00
colour12:
dcb "G","r","e","y",13
dcb 00
colour13:
dcb "L","i","g","h","t",32,"g","r","e","e","n",13
dcb 00
colour14:
dcb "L","i","g","h","t",32,"b","l","u","e",13
dcb 00
colour15:
dcb "L","i","g","h","t",32,"g","r","e","y",13
dcb 00
샘플 결과:
반사
랩 4 파트 2에서는 어셈블리 언어를 사용하여 색상 선택기를 만들었습니다. 우리에게는 새로운 도전입니다. 가장 지루한 것은 다른 루프를 사용하여 색상 문자열을 인쇄하고 사용자 선택을 강조 표시하는 것입니다. 그런 다음 루프를 사용하여 색상 픽셀을 변경해야 합니다. 어셈블리 언어는 초보자로서 4개의 서로 다른 랩에서 배우고 작업하기가 어렵습니다. 다른 고급 프로그래밍 언어와 같은 구문 및 코딩 논리에 100% 익숙하지 않기 때문에 내가 마스터라고 말할 수 없습니다. 하지만 거의 한 학기 내내 배우고 작업할 수 있어 기쁘고 전에 접해보지 못한 저급 프로그래밍 언어에 대한 시각을 보여주고, 스토리지에 대한 심도 있는 고급 프로그래밍 언어를 이해하는 데에도 도움이 됩니다. 그리고 램 뷰.
Reference
이 문제에 관하여(SPO600 스트링 랩 옵션 2: 색상 선택기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/qzhang125/spo600-string-lab-option-2-color-selector-24n5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
define SCINIT $ff81 ; initialize/clear screen
define CHROUT $ffd2 ; output character to screen
define COLOUR $10
define COLOUR_INDEX $11
define POINTER $40
define POINTER_H $41
define UP_KEY $80
define DOWN_KEY $82
lda #$00
sta COLOUR
sta COLOUR_INDEX
jsr initializePrint
getKey:
lda $ff
sty $ff
cmp #UP_KEY
beq decrementKey
cmp #DOWN_KEY
beq incrementKey
jmp getKey
decrementKey:
lda COLOUR
cmp #$01
bpl decrementColour
jmp getKey
decrementColour:
dec COLOUR
jsr initializePrint
jsr initializePaint
jmp getKey
incrementKey:
lda COLOUR
cmp #$0f
bmi incrementColour
jmp getKey
incrementColour:
inc COLOUR
jsr initializePrint
jsr initializePaint
jmp getKey
initializePrint:
jsr SCINIT
ldy #$00
writeTitle:
lda title,y
beq titleDone
jsr CHROUT
iny
bne writeTitle
titleDone:
lda #$00
sta COLOUR_INDEX
startColour:
ora #$00
ldy #$00
colourName:
jsr selectedColour
beq afterWriting
jsr highlightLine
jsr CHROUT
iny
bne colourName
afterWriting:
inc COLOUR_INDEX
lda COLOUR_INDEX
cmp #$10
bne startColour
selectedColour:
lda COLOUR_INDEX
cmp #$00
beq printColour0
cmp #$01
beq printColour1
cmp #$02
beq printColour2
cmp #$03
beq printColour3
cmp #$04
beq printColour4
cmp #$05
beq printColour5
cmp #$06
beq printColour6
cmp #$07
beq printColour7
cmp #$08
beq printColour8
cmp #$09
beq printColour9
cmp #$0a
beq printColour10
cmp #$0b
beq printColour11
cmp #$0c
beq printColour12
cmp #$0d
beq printColour13
cmp #$0e
beq printColour14
cmp #$0f
beq printColour15
rts
printColour0:
lda colour0,y
rts
printColour1:
lda colour1,y
rts
printColour2:
lda colour2,y
rts
printColour3:
lda colour3,y
rts
printColour4:
lda colour4,y
rts
printColour5:
lda colour5,y
rts
printColour6:
lda colour6,y
rts
printColour7:
lda colour7,y
rts
printColour8:
lda colour8,y
rts
printColour9:
lda colour9,y
rts
printColour10:
lda colour10,y
rts
printColour11:
lda colour11,y
rts
printColour12:
lda colour12,y
rts
printColour13:
lda colour13,y
rts
printColour14:
lda colour14,y
rts
printColour15:
lda colour15,y
rts
highlightLine:
ldx COLOUR_INDEX
cpx COLOUR
beq highlight
ora #$00
rts
highlight:
ora #$80
rts
initializePaint:
lda #$00 ; set a pointer at $40 to point to $0200
sta POINTER
lda #$02
sta POINTER_H
ldy #$00
lda COLOUR
draw_screen:
sta ($40), y ; set pixel
iny ; increment index
bne draw_screen ; continue until done the page
inc $41 ; increment the page
ldx $41 ; get the page
cpx #$06 ; compare with 6
bne draw_screen ; continue until done all pages
rts
title:
dcb "L","i","s","t",32,"o","f",32,"C","o","l","o","u","r","s",":",13
dcb 00
colour0:
dcb "B","l","a","c","k",13
dcb 00
colour1:
dcb "W","h","i","t","e",13
dcb 00
colour2:
dcb "R","e","d",13
dcb 00
colour3:
dcb "C","y","a","n",13
dcb 00
colour4:
dcb "P","u","r","p","l","e",13
dcb 00
colour5:
dcb "G","r","e","e","n",13
dcb 00
colour6:
dcb "B","l","u","e",13
dcb 00
colour7:
dcb "Y","e","l","l","o","w",13
dcb 00
colour8:
dcb "O","r","a","n","g","e",13
dcb 00
colour9:
dcb "B","r","o","w","n",13
dcb 00
colour10:
dcb "L","i","g","h","t",32,"r","e","d",13
dcb 00
colour11:
dcb "D","a","r","k",32,"g","r","e","y",13
dcb 00
colour12:
dcb "G","r","e","y",13
dcb 00
colour13:
dcb "L","i","g","h","t",32,"g","r","e","e","n",13
dcb 00
colour14:
dcb "L","i","g","h","t",32,"b","l","u","e",13
dcb 00
colour15:
dcb "L","i","g","h","t",32,"g","r","e","y",13
dcb 00
랩 4 파트 2에서는 어셈블리 언어를 사용하여 색상 선택기를 만들었습니다. 우리에게는 새로운 도전입니다. 가장 지루한 것은 다른 루프를 사용하여 색상 문자열을 인쇄하고 사용자 선택을 강조 표시하는 것입니다. 그런 다음 루프를 사용하여 색상 픽셀을 변경해야 합니다. 어셈블리 언어는 초보자로서 4개의 서로 다른 랩에서 배우고 작업하기가 어렵습니다. 다른 고급 프로그래밍 언어와 같은 구문 및 코딩 논리에 100% 익숙하지 않기 때문에 내가 마스터라고 말할 수 없습니다. 하지만 거의 한 학기 내내 배우고 작업할 수 있어 기쁘고 전에 접해보지 못한 저급 프로그래밍 언어에 대한 시각을 보여주고, 스토리지에 대한 심도 있는 고급 프로그래밍 언어를 이해하는 데에도 도움이 됩니다. 그리고 램 뷰.
Reference
이 문제에 관하여(SPO600 스트링 랩 옵션 2: 색상 선택기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/qzhang125/spo600-string-lab-option-2-color-selector-24n5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)