FUNKCJA: MOVE.B FLAGI,D0 ANDI.B #%00000001,D0 BEQ.S FUNKCJA_no ; BEQ.S oznacza Short czyli krotki skok warunkowy (7-bitowy, ~128 bajty +/-) ; BEQ.W oznacza Wide czuli dlugi skok warunkowy (15-bitowy, do ~32KB +/-) ; jakis kod FUNKCJA_no: RTS
MOVE.B zmienna,D0 ANDI.B #%11110000,D0 ORI.B #%00000001,D0 MOVE.B D0,zmienna
MOVE.B zmienna,D0 ADDI.B #$01,D0 ; o jeden MOVE.B D0,zmienna MOVE.B zmienna,D0 ADDI.B #$04,D0 ; zwiekszamy zmienna o 4 MOVE.B D0,zmienna
SPRAWDZPOLOWKI: MOVE.B zmienna,D0 CMPI.B #$80,D0 BCC.S wieksze ; skocz gdy zmienna wieksza niz CMP (mozna uzyc BHI.S ?) BCS.S mniejsze ; skocz gdy zmienna mniejsza niz CMP (mozna uzyc BLS.S ?) ; tu pytanie czy uzywajac BCC/BCS musze miec RTS czy oba skoki MUSZA SIE WYKONAC (i jaka sutuacja bedzie gdy uzyje BHI i BLS czy musze ustawic RTS ?) wieksze: RTS mniejsze: RTS
CLR.B D0 ; skasuje bajt znajdujacy sie w rejestrze D0 CLR.W (A4) ; to skasuje slowo 2-bajtowe znajdujace sie pod adresem WSKAZANYM w rejestrze adresowym A4 (np.jest tam adres $FF00) CLR.L $1C(A2) ; to znalazlem ale jako czesc kodu, nie mam pojecia co robi te $1C w tym przypadku????? wiem, ze nie mozna tak wyczyscic rejestru adresowego, musze wykonac np.: CLR.W D0 MOVE.W D0,A0 ; dopiro teraz mozna wyczyscic rejestr adresowy uzywajac CLR
MOVE.W $8000,A0 ; ustaw adres $8000 w A0 MOVE.W $C000,A1 ; ustaw adres $C000 w A1 MOVE.W #$1000,D0 ; zaladuj wartosc $1000 do rejestru D0 aby dzialal jako licznik LOOP: MOVE.B (A0)+,(A1)+ ; skopiuj bajt z A0 ($8000) do A1 ($C000) i zwieksz adres o jeden SUBI.W #$01,D0 ; odejmij jeden od D0 i wykonaj loop az bedzie miec wartosc zerowa.... BNE.S LOOP
@siudym, post #1
@Krashan, post #3
@siudym, post #4
@siudym, post #4
@siudym, post #1
@siudym, post #4
Zauważyłem też stosowanie np. nazw zmiennych w nawiasie - jaki ma to cel? Np.:
lea (zmienna).l,a0
org $1000 ; organizuj kod od adresu $1000 start: lea (zmienna).l,a0 rts org $2000 ; teraz organizuj kod od $2000 zmienna: dc.l 0
@siudym, post #12
@jimiche, post #16
MOVE.B $08,D0 MOVE.W ZMIENNA,A0 ;zapisz adres 16-bitowy ZMIENNEJ do A0 ADDQ.B $01,(A0,D0,B)
LDX $08 LDA $01 STA ZMIENNA,X
@siudym, post #17
@juen, post #18
LDA #stala ; ladujemy stala LDA zmienna ; ladujemy zmienna LDA #128 ; ladujemy dec LDA #$80 ; ladujemy hex LDA $40 ; ladujemy zawartosc wskazanego adresu (1 bajtowy wiec ZP)
MOVE.B $40,A0 ; ladujemy zawartosc wskazanego adresu do A0 (ale nie pod adres wskazany przez A0) MOVE.B $40,(A0) ; ladujemy zawartosc wskazanego adresu pod adres wskazany w A0 MOVE.B #$40,A0 ; ladujemy wartosc hex do A0 MOVE.B #40,A0 ; ladujemy wartosc dec do A0 MOVE.B #zmienna,A0 ; ladujemy wartosc jaka znajduje sie w zmiennej do A0 MOVE.B #zmienna,(A0) ; ladujemy wartosc jaka znajdyje sie w zmiennej pod adres wskazany w A0
@siudym, post #21
00000000: zmienna: dc.l 123 00000004: zmienna2: dc.l 124 00000008: move.l #123,d0 ;d0=123 (..) move.l #123,a0 ;a0=123 (..) move.l zmienna,d0 ;d0=123 (..) move.l #zmienna,d0; d0=#00000000 (..) move.l #zmienna2,d0; d0=#00000004 (..) move.l 4,d0; d0=124
@siudym, post #17
@Don_Adan, post #26
@siudym, post #21
unrle: moveq #0,d0 lea src(pc),a0 lea dst(pc),a1 move.b (a0)+,d0 .1 move.b (a0)+,d1 cmp.b d0,d1 beq.b .2 move.b d1,(a1)+ move.b d1,d2 ;rle_byte bra.b .1 .2 moveq #0,d3 move.b (a0)+,d3 beq.b .4 subq.b #1,d3 .loop move.b d2,(a1)+ dbf d3,.loop bra.b .1 .4 rts ;;_vram_unrle: ; ; tay ; stx <RLE_HIGH ; lda #0 ; sta <RLE_LOW ; lda (RLE_LOW),y ;pobranie bajtu i zapis go na rle_tag ; sta <RLE_TAG ; iny ; bne @1 ; inc <RLE_HIGH ;@1: ; lda (RLE_LOW),y ; iny ; bne @11 ; inc <RLE_HIGH ;@11: ; cmp <RLE_TAG ; beq @2 ; sta PPU_DATA ; sta <RLE_BYTE ; bne @1 ;@2: ; lda (RLE_LOW),y ; beq @4 ; iny ; bne @21 ; inc <RLE_HIGH ;@21: ; tax ; lda <RLE_BYTE ;@3: ; sta PPU_DATA ; dex ; bne @3 ; beq @1 ;@4: ; rts ;
@Don_Adan, post #25
move.w #$8000,A0
to w A0 bedziesz mial $FFFF8000, a nie #$00008000. A to jest roznica
00000000: zmienna: dc.l 123 00000004: zmienna2: dc.l 124 00000008: move.l #123,d0 ;d0=123 (..) move.l #123,a0 ;a0=123 (..) move.l zmienna,d0 ;d0=123 (..) move.l #zmienna,d0; d0=#00000000 (..) move.l #zmienna2,d0; d0=#00000004 (..) move.l 4,d0; d0=124