Programowanie: Konwersje znaków ATASCII i ANTIC
From Atariki
[Edytuj]
ATASCII → ANTIC
Program przekształca wpisany do akumulatora znak w kodzie ATASCII na kod ekranowy ANTIC-a. Wynik w akumulatorze.
Najkrótszy kod:
atascii2antic: asl php adc #$c0 spl:eor #$40 plp ror rts
Dwa bajty dłuższe, ale szybsze:
atascii2antic: asl adc #$c0 spl:eor #$40 lsr scc:eor #$80 rts
Najdłuższa metoda, nie używa stosu, znacznika C ani D:
atascii2antic: bit const20 sne:eor #$40 const40 equ *-1 bit const40 sne:eor #$20 const20 equ *-1 rts
Można oczywiście użyć tablicy:
atascii2antic: tax lda antic,x rts antic: :32 .byte $40+# :64 .byte $00+# :32 .byte $60+# :32 .byte $c0+# :64 .byte $80+# :32 .byte $e0+#
[Edytuj]
ANTIC → ATASCII
Zasadniczo konwersję przeprowadza się analogicznie:
antic2atascii: asl php spl:eor #$40 adc #$40 plp ror rts
Dwa bajty dłuższe, ale szybsze:
antic2atascii: asl spl:eor #$40 adc #$40 lsr scc:eor #$80 rts
Najdłuższa metoda, nie używa stosu, znacznika C ani D:
antic2atascii: bit const40 sne:eor #$20 const20 equ *-1 bit const20 sne:eor #$40 const40 equ *-1 rts
Wersja tablicowa:
antic2atascii: tax lda atascii,x rts atascii: :64 .byte $20+# :32 .byte $00+# :32 .byte $60+# :64 .byte $a0+# :32 .byte $80+# :32 .byte $e0+#
[Edytuj]
Warianty
Jeśli w programie mamy już procedurę konwersji ATASCII → ANTIC, można użyć innej metody:
antic2atascii: jsr atascii2antic jmp atascii2antic
lub też (dysponując wersją stablicowaną):
antic2atascii: tax ldy antic,x lda antic,y rts
Analogiczną konwersję ATASCII → ANTIC można oczywiście przeprowadzić mając procedurę konwersji ANTIC → ATASCII
atascii2antic: jsr antic2atascii jmp antic2atascii
lub dysponując tablicą:
atascii2antic: tax ldy atascii,x lda atascii,y rts