SPO600 - 랩 02

3322 단어
연구실 02 - 6502!

이 실습 목표는 6502 프로그램의 성능을 계산하는 것입니다.
프로그램은 다음과 같으며 실행할 수 있습니다HERE.

    lda #$00    ; set a pointer at $40 to point to $0200
    sta $40
    lda #$02
    sta $41

    lda #$07    ; colour number

    ldy #$00    ; set index to 0

loop:   sta ($40),y ; set pixel at the address (pointer)+Y

    iny     ; increment index
    bne loop    ; continue until done the page

    inc $41     ; increment the page
    ldx $41     ; get the current page number
    cpx #$06    ; compare with 6
    bne loop    ; continue until done all pages



프로그램을 실행하는 데 몇 초가 소요되는지 계산하려면 각 명령이 몇 사이클이 소요되고 각 명령이 완료되는 데 걸리는 시간을 계산해야 합니다.

그렇게 하려면 this 을 살펴봐야 합니다.

이 웹사이트는 각 명령어에 대한 클럭 값을 제공하므로 프로그램이 1MHz에서 소요되는 총 시간을 측정할 수 있습니다.

성능을 계산하자



첫 번째 지침부터 시작하겠습니다.lda #$00


Lda는 우리의 첫 번째 지침이므로 이제 웹사이트에서 주기 값을 살펴보겠습니다.



여기서 우리는 즉시 주소 지정을 사용하기 때문에 LDA가 2 사이클이 걸린다는 것을 알 수 있습니다.

추적하기 위해 모든 값으로 차트를 만들 수 있습니다.

내 차트에서 볼 수 있듯이 우리는 사이클 수, 발생 횟수, 대체 사이클 및 발생 횟수를 얻고 총 사이클의 합계를 만듭니다.

여기에서 최종 사이클 수에 CPU 속도를 곱하여 프로그램을 실행하는 데 필요한 시간을 볼 수 있습니다.



최적화하고 더 빠르게 실행하려고 했지만 페이지 작업이 어렵다는 것을 알게 되었습니다. 내 목표는 각 페이지의 각 루프에 대해 픽셀이 노란색이 되도록 만드는 것이었습니다. 이렇게 하면 더 빨라질 수 있지만 만들 수 없었습니다. 속도를 계산하는 작업입니다.

실험 중:



첫 번째 프로그램은 다음과 같은 화면을 제공합니다.


tya 명령어로 실험할 때 다음과 같은 결과가 나타납니다.



이제 화면에 다른 색상의 줄무늬가 있음을 알 수 있습니다. tyatransfer Index Y to accumulator 루프가 발생할 때마다 누산기(색상)가 1씩 증가함을 의미합니다.

그러나 lsa 이후에 tya를 사용하려고 할 때 이 오류가 계속 발생합니다.



이 연구실에 대한 나의 생각



6502 프로그램이 실행되는 데 걸리는 시간과 주기를 계산하는 방법을 이해하는 것은 정말 멋진 일입니다. 이 방법으로 테스트를 수행하여 더 빠르게 만들 수 있습니다.
하지만 가끔은 메모리 주소로 작업하는 것이 복잡하고 혼란스러울 수 있다는 생각이 듭니다. 쓰는 방법도 여러 가지가 있고 더 잘 이해하려면 시간이 더 필요할 것 같습니다.
프로그램을 원하는 대로 최적화할 수 없어서 답답했지만 나중에 이 연구실에 다시 와서 다시 시도하기로 했습니다.

읽어 주셔서 감사합니다!

좋은 웹페이지 즐겨찾기