SPO600 - 랩 02
이 실습 목표는 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
명령어로 실험할 때 다음과 같은 결과가 나타납니다.이제 화면에 다른 색상의 줄무늬가 있음을 알 수 있습니다.
tya
는 transfer Index Y to accumulator
루프가 발생할 때마다 누산기(색상)가 1씩 증가함을 의미합니다.그러나
lsa
이후에 tya
를 사용하려고 할 때 이 오류가 계속 발생합니다.이 연구실에 대한 나의 생각
6502 프로그램이 실행되는 데 걸리는 시간과 주기를 계산하는 방법을 이해하는 것은 정말 멋진 일입니다. 이 방법으로 테스트를 수행하여 더 빠르게 만들 수 있습니다.
하지만 가끔은 메모리 주소로 작업하는 것이 복잡하고 혼란스러울 수 있다는 생각이 듭니다. 쓰는 방법도 여러 가지가 있고 더 잘 이해하려면 시간이 더 필요할 것 같습니다.
프로그램을 원하는 대로 최적화할 수 없어서 답답했지만 나중에 이 연구실에 다시 와서 다시 시도하기로 했습니다.
읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(SPO600 - 랩 02), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/xguhx/spo600-lab-02-ei5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)