2,376

(28 odpowiedzi, napisanych Bałagan)

testujesz na emulu, ktory tez usostepnia Ci 1MB XMS, na koncu testujesz na prawdziwym Atari

i prace ida jak burza, wiec dla chcacego nic trudnego

2,377

(1 odpowiedzi, napisanych Software, Gry - 8bit)

milo jest sie dowiedziec, ze sa jeszcze osoby ktorym zalezy :)

i tak natchniony nowa sila, zabieram sie za kodowanie :)

2,378

(20 odpowiedzi, napisanych Software, Gry - 8bit)

jeszcze jedno pytanie

skoro w makrach uzywany jest znak % jako oznaczenie parametru, to jak przedstawiane sa wartosci binarne, bo w QA itp znak % wlasnie oznacza wartosci binarne

2,379

(20 odpowiedzi, napisanych Software, Gry - 8bit)

latwiej znalezc informacje w tej samej linii co rozkaz niz przeszukiwac linie wczesniejsze, jesli jakis as bedzie umieszczal .ab lub .aw kilka, kilkadziesiat liniii wczesniej przez wlasciwymi rozkazami no to program traci na przejrzystosci

pozatym skoro REP i SEP maja tylko jeden tryb adresowania '#', asembler moglby łatwo sledzic zmieniajace sie poprzez te mnemoniki wartosci i odpowiednio interpretowac nastepne rozkazy odwolujace sie do rejestrow, przez co wlasciwie niepotrzebne bylyby dodatkowe informacje typu '.b' lub '.w' lub '.ab' lub '.aw'

user zawsze moglby sprawdzic w listingu jakie rozkazy zostaly wygenerowane

jednak odbywaloby sie to tylko liniowo, jesli w programie wystepowalyby skoki (jsr, jmp i inne) taki asembler nie reagowalby juz prawidlowo, czyli na poczatku kazdej procedury czy bloku trzebaby bylo umieszczac REP lub SEP.

2,380

(20 odpowiedzi, napisanych Software, Gry - 8bit)

to

lda #$2000

jeszcze asm moglby zrozumiec jako word, ale z tym

lda #$0000


byloby ciezko, wiec zapisa tego w ten sposob

lda.w #$0000

 
jednak wydaje sie calkiem logiczne

no ale user, wiadomo bedzie musial wiedziec ze przed chwila wlaczyl 16-bitowe rejestry i tylko dla takich rejestrow bedzie dodawal za mnemonikiem '.b' lub '.w'

2,381

(20 odpowiedzi, napisanych Software, Gry - 8bit)

sa przelaczniki w oryginale, tylko ja tego nie umiescilem, zaznaczylem ze jest to wylko fragment

w oryginale najpierw ustawiane sa rejestry na 16-bit, a potem moga wystepowac mnemoniki z '.b' lub '.w', zeby nie bylo watpliwosci oto caly kod:

; assemble at $8000
    org $8000


; equates
    animationPointer equ $00
    sourcePointer    equ animationPointer+$04
    sourceOffset     equ sourcePointer+$04
    decompressLength equ sourceOffset+$02
    collectCount     equ decompressLength+$02
    repeatCount      equ collectCount+$02
    framePointer     equ repeatCount+$02
    frameIndex       equ framePointer+$04
    animatedBytes    equ frameIndex+$02
    frameCount       equ animatedBytes+$02
    frameRate        equ frameCount+$02

    joypad           equ $1000
    animationIndex   equ joypad+$02


; include decompression code
    include "compress.src"


; include frame code
    include "frames.src"


; include animation code
    include "animate.src"


; program start
programStart
    sei             ; disable interrupts
    phk
    plb
    clc
    xce             ; native 16-bit mode

; initialise SNES
    sep #$30        ; X, Y & A  8-bits

    lda #$8F        ; clear registers
    sta $2100
    stz $2101
    stz $2102
    stz $2103
    stz $2105
    stz $2106
    stz $2107
    stz $2108
    stz $2109
    stz $210A
    stz $210B
    stz $210C

    stz $210D
    stz $210D
    stz $210E
    stz $210E
    stz $210F
    stz $210F
    stz $2110
    stz $2110
    stz $2111
    stz $2111
    stz $2112
    stz $2112
    stz $2113
    stz $2113
    stz $2114
    stz $2114

    lda #$80
    sta $2115
    stz $2116
    stz $2117
    stz $211A
    stz $211B
    lda #$01
    sta $211B
    stz $211C
    stz $211C
    stz $211D
    stz $211D
    stz $211E
    sta $211E
    stz $211F
    stz $211F
    stz $2120
    stz $2120
    stz $2121
    stz $2123
    stz $2124
    stz $2125
    stz $2126
    stz $2127
    stz $2128
    stz $2129
    stz $212A
    stz $212B
    stz $212C
    stz $212D
    stz $212E
    lda #$30
    sta $2130
    stz $2131
    lda #$E0
    sta $2132
    stz $2133

    stz $4200
    lda #$FF
    sta $4201
    stz $4202
    stz $4203
    stz $4204
    stz $4205
    stz $4206
    stz $4207
    stz $4208
    stz $4209
    stz $420A
    stz $420B
    stz $420C
    stz $420D

; set register modes
    rep #$10        ; X & Y 16-bits
    sep #$20        ; A 8-bits

; initialise graphics hardware
    lda #$03        ; graphics mode 3
    sta $2105

    lda #$01        ; enable playfield 0
    sta $212c

    lda #$7C        ; set playfield 0 map to $7C00
    sta $2107
    lda #$00        ; set playfield 0 tile set to $0000
    sta $210b

    lda #$F3        ; position screen vertically in centre
    sta $210E
    lda #$1F
    sta $210E

; initialise playfield 0 map data
    ldx.w #$7C00    ; set VRAM pointer to playfield 0 map
    stx $2116

; characters $0000 to $031F
    ldx.w #$0000
initMapLoop1
    stx $2118
    inx
    cpx.w #$320
    bne initMapLoop1

; 7 rows of character $320
    ldx.w #$0000
    ldy.w #$320
initMapLoop2
    sty $2118
    inx
    cpx.w #$E0
    bne initMapLoop2

; clear playfield 0 tile data
    ldx.w #$0000
    stx $2116
    ldy.w #$0000
initTileLoop
    sty $2118
    inx
    cpx.w #$7C00
    bne initTileLoop

    lda #$81        ; enable vertical blank interrupt & joypad read
    sta $4200

    cli             ; enable interrupts

    rep #$20        ; A 16-bits

; initialise variables
    lda.w #$0000
    sta animationIndex

; do the next animated sequence
doAnimation
    ldx animationIndex ; get index into animations

    lda frameTableLow,x ; get frame pointer for this animation
    sta.b framePointer
    lda frameTableHigh,x
    sta.b framePointer+$02

    stz.b frameIndex ; clear frame index

    lda animationTableLow,x ; get animation data pointer for this animation
    sta.b animationPointer
    lda animationTableHigh,x
    sta.b animationPointer+$02

    lda speedTable,x ; get frame rate
    sta.b frameRate

    inx             ; update animation index
    inx
    cpx.w #frameTableLowEnd-frameTableLow ; if past last animation
    bne saveAnimationIndex
    ldx.w #$0000    ; then reset index
saveAnimationIndex
    stx animationIndex

    jsr readyNextFrame ; ready frame data
    jsr decompressData ; decompress animation data
    jsr processAnimationFrame ; update screen image with animation data

    jsr readyNextFrame ; ready frame data for next frame
    jsr decompressData ; decompress animation data

    jsr fadeIn      ; fade in display now that first frame is visible

mainLoop

    stz.b frameCount ; reset frame count

    wai             ; wait for vertical blank

    jsr processAnimationFrame ; update screen image with animation data

    jsr readyNextFrame ; ready frame data for next frame
    jsr decompressData ; decompress animation data

    ldy.b frameCount ; get frame count

delayLoop

    lda joypad      ; is B pressed?
    bit.w #$8000
    bne B_pressed   ; then branch

    iny             ; if enough frames delayed
    cpy.b frameRate
    bpl mainLoop    ; then branch

    wai             ; wait for vertical blank

    bra delayLoop   ; and repeat

B_pressed
    stz joypad
    wai             ; wait for vertical blank
    lda joypad      ; loop if B is still pressed
    bit.w #$8000
    bne B_pressed

    jsr fadeOut     ; fade out display

    stz joypad

    brl doAnimation ; and repeat for next animation


; function to fade out current display
fadeOut
    php

    sep #$20        ; A 8-bits

    lda #$0F
fadeOutLoop
    sta $2100
    wai
    sec
    sbc #$01
    bpl fadeOutLoop

    lda #$80        ; disable screen
    sta $2100

    plp

    rts


; function to fade in current display
fadeIn
    php

    sep #$20        ; A 8-bits

    lda #$00        ; enable screen, brightness off
    sta $2100

    wai

    lda #$00
fadeInLoop
    sta $2100
    wai
    clc
    adc #$01
    cmp #$10
    bne fadeInLoop

    plp

    rts


; vertical blank interrupt routine
verticalBlankInterrupt
    sep #$20        ; A 8-bits

    pha             ; save accumulator

    lda.b frameCount ; increment frame count
    clc
    adc #$01
    sta.b frameCount

    lda #$1F        ; delay before attempting to read joypad
joypadDelayLoop
    sec
    sbc #$01
    bne joypadDelayLoop

waitForJoypad
    lda $4212       ; wait until the joypad is ready to read
    and #$01
    bne waitForJoypad

    lda $4218       ; read joypad
    ora joypad
    sta joypad
    lda $4219
    ora joypad+$01
    sta joypad+$01

    pla             ; restore accumulator
    rti             ; exit vertical blank


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                               ANIMATION DATA                              ;
;---------------------------------------------------------------------------;
; To add an animation to this program you will need to add new entries to   ;
; the...                                                                    ;
;                                                                           ;
; speedTable - the number of vertical blank periods each frame should be    ;
;              displayed for                                                ;
;                                                                           ;
; frameTableLow  - pointer to the .SAF file data                            ;
; frameTableHigh                                                            ;
;                                                                           ;
; animationTableLow - pointer to the .SAD file data                         ;
; animationTableHigh                                                        ;
;                                                                           ;
; You will also need to include the .SAF and .SAD file data.                ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


; speeds
speedTable
    dc.w $0006,$0004


; frame table (low word)
frameTableLow
    dc.w cry_fra&$FFFF
    dc.w merm_fra&$FFFF
frameTableLowEnd


; frame table (high word)
frameTableHigh
    dc.w cry_fra/$10000
    dc.w merm_fra/$10000


; frame data
cry_fra
    incbin "cry.saf"

merm_fra
    incbin "merm.saf"


; animation table (low word)
animationTableLow
    dc.w cry_anm&$FFFF
    dc.w merm_anm&$FFFF


; animation table (high word)
animationTableHigh
    dc.w cry_anm/$10000
    dc.w merm_anm/$10000


; vertical blank interrupt vector
    pad $FFEA
    dc.w verticalBlankInterrupt


; run/reset vector
    pad $FFFC
    dc.w programStart


    pad


; animation data
cry_anm
    incbin "cry.sad"

merm_anm
    incbin "merm.sad"

plik TEST.ASM znajduje sie w pliku ANISNES.zip

2,382

(20 odpowiedzi, napisanych Software, Gry - 8bit)

no widzisz Lizard, jak chcesz to potrafisz :) o to mi chodzilo, a pytania zadaje aby sie upewnic, bo nie ma nic gorszego od niepewnosci ;)

jakie sa ograniczenia co do ilosci makr ?


pozatym sa inne manuale, a w nich

Several new addressing modes are used to access the full address space. A 65816 assembler would decode "long" addressing given this input: 

LDA $0445F2  ; load byte from $45F2 of RAM  
             ; bank 4  

Stad wzielo sie koncowe pytanie z punktu 1, moze w 816 wewnetrznie przepisuje najstarszy bajt do rejestru $d301 :) a reszta jest adresem w obszarze tego banku, fajnie by bylo :), no ale Lizard mowi ze nie, wiec ...


tutaj http://www.programmersheaven.com/zone8/cat715/13292.htm znalazlem asembler 816 podobny do QA, przyklad (to tylko ciekawsze fragmenty programu):

; assemble at $8000
    org $8000
; equates
    animationPointer equ $00

; include decompression code
    include "compress.src"

; program start
programStart
    sei             ; disable interrupts
    phk
    plb
    clc
    xce             ; native 16-bit mode

; set register modes
    rep #$10        ; X & Y 16-bits
    sep #$20        ; A 8-bits

; initialise graphics hardware
    lda #$03        ; graphics mode 3
    sta $2105

    lda #$01        ; enable playfield 0
    sta $212c

    lda #$7C        ; set playfield 0 map to $7C00
    sta $2107
    lda #$00        ; set playfield 0 tile set to $0000
    sta $210b

; characters $0000 to $031F
    ldx.w #$0000
initMapLoop1
    stx $2118
    inx
    cpx.w #$320
    bne initMapLoop1

; 7 rows of character $320
    ldx.w #$0000
    ldy.w #$320
initMapLoop2
    sty $2118
    inx
    cpx.w #$E0
    bne initMapLoop2

; clear playfield 0 tile data
    ldx.w #$0000
    stx $2116
    ldy.w #$0000
initTileLoop
    sty $2118
    inx
    cpx.w #$7C00
    bne initTileLoop

; animation data
cry_anm
    incbin "cry.sad"

Czyli tutaj opcjonalnie stosowane jest rozszerzenie mnemonika po kropce '.b','.w'. Dzieki czemu wiadomo ze chcemy zaladowac bajt lub slowo do rejestru.

Czy w innych asemblerach 816 jest podobnie, moze to standard ?
Czy moze wystarczy jak asembler bedzie decydowac jaki tryb wybrac, na podstawie obliczonej wartosci argumentu mnemonika, a moze lepiej nie ?

2,383

(16 odpowiedzi, napisanych Software, Gry - 8bit)

pamietam ta gre, wlasnie przez ta czaszke

jak pierwszy raz wyskoczyla znienacka, az podskoczylem :)

2,384

(20 odpowiedzi, napisanych Software, Gry - 8bit)

moj post swiadczy o tym ze przeczytalem manuala (bo skad niby skopiowalem te fragmenty dotyczace adresacji), ale nie zauwazylem w nim praktycznego zastosowania teorii

moj post swiadczy o tym, ze nie pisalem nic dla 816 i nie uzywalem MAE

moj post swiadczy o tym, ze kazdy moze inaczej zinterpretowac manuala, szczegolnie jesli nie moze podeprzec sie przykladem, bo sucha teoria to nie wszystko

pozatym gdybys dokladniej doczytal pytanie dotyczace makr moze zrozumialbys ze nie chodzilo mi o to o czym napisales (o tym juz bylo kiedys w moich wczesniejszych pytaniach i zdaje sie ze najpełniej udzielil na nie odpowiedzi Pecus), ale i tak dziekuje ze poswieciles czas

2,385

(20 odpowiedzi, napisanych Software, Gry - 8bit)

Mam kilka pytan odnosnie 65816, liczylem ze odpowie na nie Laoo jako ze juz cos napisal dla 816, ale widocznie jest tak zapracowany ze nie odpowie :). Teraz wiec licze na to ze znajdzie sie kilka osob na aarrea ktore programowaly na 816 i udziela odpowiedzi na n/w pytania.

1. Jak to jest aktualnie i czy bedzie mozliwe gdy dopalka Pasia ujrzy swiatlo dzienne, konkretnie chodzi o adresowanie 24 bitowe:

[zp] - strony zerowej pośredni długi - jak wyżej, jednak pobierany ze strony zerowej adres jest 24-bitowy.

[zp],Y - strony zerowej pośredni długi postindeksowany - tak, jak (zp),Y tylko z 24-bitowym adresem na stronie zerowej.

[abs] - pośredni długi - jak (abs) tyle tylko, że adres jest 24-bitowy.

long - absolutny długi - argumentem jest 24-bitowy adres.

long,X - absolutny długi indeksowany

Czy wogole mozna uzywac trybu [] lub long piszac program dla 65816,nie majac pamieci widzianej jako ciagly obszar. Czy w tym adresowaniu najstarszy bajt to kod banku pamieci, czyli czy mozna by wpisac adres kod_banku$4000..$7FFF np. "lda $835000" bo wtedy nie trzeba by miec pamieci zorganizowanej liniowo tylko sprytniejszy asembler.

2. Jak w asemblerze dla 65816 zapisac ten tryb adresowania:

ds,S - wskaznika stosu z przesunięciem - ośmiobitowa dana natychmiastowa ds jest dodawana do wartości wskaĽnika stosu. Tryb ten pozwala na adresowanie 256 bajtów wewnątrz stosu, licząc od jego szczytu.

(ds,S),Y - wskaznika stosu z przesunięciem pośredni indeksowany - do adresu pobranego z miejsca wskazanego przez ds,S dodawana jest wartość rejestru Y. Pozwala to na trzymanie wektorów na stosie, jeśli gdzie indziej nie ma miejsca.

czy asembler rozpoznaje jakies wyrazenia kluczowe 'ds' i 'S'

i w kodzie programu piszemy lda ds,S ?

3. Czy asembler dla 65816 rozpoznaje wartosc rejestru D, ktory okresla adres strony zerowej, tak aby podczas asemblacji odwolania do nowo ustawionej strony zerowej byly zasemblowane jako 2-bajtowe rozkazy a nie 3-y bajtowe.

Moze mi ktos przedstawic przyklad programu w ASM ze zmiana wartosci rejestru D i odwolanie do tak nowo ustawionej strony zerowej ?

4. Jakiego asemblera uzywal Laoo do napisania benchmarka porownujacego 6502 i 816 ?

5. Jak realizowana jest obsluga makr w asemblerach ?

Czy po napotkaniu komendy .MACRO nastepuje przepisanie zawartosci takiego makra gdzies do wydzielonego obszaru pamieci, aby pozniej podczas dalszej asemblacji tylko odwolywac sie w ten obszar i ciagle go asemblowac, czy tez zapamietac w tym obszarze dane zamienione na jakies symbole (tokeny) i potem je juz szybciej interpretowac, a moze zawartosc makra jest wysylana do pliku zewnetrznego pozniej po napotkaniu odwolania do makra wywolywana jest asemblacja pliku z makrem i parametrami ?

Wiadomo ze kazdy moze napisac sobie obsluge makr po swojemu, ale chcialbym sie dowiedziec jak to jest robione "zwyczajowo", jako ze wczesniej nie mialem okazji zetknac sie z takim zadaniem.

2,386

(149 odpowiedzi, napisanych Miejsca w sieci)

Dely dorzuc tyle ile trzeba, a ja Ci oddam jak sie spotkamy :)

2,387

(149 odpowiedzi, napisanych Miejsca w sieci)

Vasco ma w cholere mocy przerobowych, z nadmiaru wolnego czasu pali DVD x2 a moglby x8 ;)

2,388

(6 odpowiedzi, napisanych Software, Gry - 8bit)

G2F juz poprawilem, wiecej bledow nie znalazlem, teraz koncze super hiper assembler dla Atarci

2,389

(10 odpowiedzi, napisanych Software, Gry - 8bit)

tak, pamietam ten program, byl taki, ale nie wiem gdzie go mam :)

2,390

(23 odpowiedzi, napisanych Software, Gry - 8bit)

GHE to ten edytor w ktorym miala byc mozliwosc wstawienia grafiki i automatyczne otaczanie jej tekstem :)

ehh Casper, Casper tyle gadania o nic

2,391

(10 odpowiedzi, napisanych Software, Gry - 8bit)

a co to jest filtr dolnoprzepustowy ??

jakis przyklad ??

2,392

(7 odpowiedzi, napisanych Bałagan)

p*.* tetrisa  :evil:

2,393

(10 odpowiedzi, napisanych Software, Gry - 8bit)

format tmc2 bedzie polimorficzny ;)

2,394

(14 odpowiedzi, napisanych Sprzęt - 8bit)

to by bylo cos :)

2,395

(14 odpowiedzi, napisanych Sprzęt - 8bit)

czyli mozna by zmiksowac w jednej linii grafike Hires z 4 kolorowa trybu 15OS , bez sztuczek ze zmiana rastra ?

2,396

(16 odpowiedzi, napisanych Konsole)

wow Saboteur, wypadaloby teraz dokonac paru konwersji i przerzucic na XE/XL :) jedynie sluszną platforme  8)

2,397

(28 odpowiedzi, napisanych Software, Gry - 8bit)

A mostly Mac/65 compatible cross-assembler

http://www.cs.utah.edu/~schmelze/atari/atasm/index.html

hehe, jest i na PC MAC65

2,398

(6 odpowiedzi, napisanych Sprzęt - 8bit)

zdaje sie ze zapakowali do Commodore 128, cos takiego blittero podobnego

2,399

(9 odpowiedzi, napisanych Bałagan)

nie dziekuje, to taki zart odpowiedz na twoje zapytanie :)

2,400

(9 odpowiedzi, napisanych Bałagan)

jak w temacie  :lol: