Spot 600文字列研究室オプション2 :色セレクタ
6351 ワード
導入
こんにちは私の友人、戻って戻って文字列研究室の2番目の部分に戻って、我々は2つのプログラムを作成し、6502アセンブリ言語を使用してパート2に分割することを決めた.最初の部分では、我々は追加計算機を作成し、今あなたが読んでいるものは、この研究室の第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部では,アセンブリ言語を用いたカラーセレクタを作成した.それは私たちにとって新しい挑戦です.最も退屈なことは、色文字列を印刷し、ユーザーの選択を強調するために別のループを使用することです.その後、カラーピクセルを変更するためにループを使用する必要があります.アセンブリ言語は、初心者として学ぶためには、4つの異なるラボでそれを勉強するのは難しいです.私は他のより高いプログラミング言語のような構文やコーディングロジックに精通していないので、私はそれのマスターだと言うことはできません.しかし、私はそれを学んで、ほぼ全体の学期のためにそれに取り組んでうれしいです、そして、それは私が以前に触れなかった低レベルのプログラミング言語の見方を示します、そして、記憶装置とRAM見解に深くより高いプログラミング言語を理解するのを助けます.
Reference
この問題について(Spot 600文字列研究室オプション2 :色セレクタ), 我々は、より多くの情報をここで見つけました https://dev.to/qzhang125/spo600-string-lab-option-2-color-selector-24n5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol