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
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Nowy firmware 1.5 dla SDrive-MAX Ulepszony tryb szybki i poprawki kaset w nowej wersji firmware
Ice-T 2.8.2 Nowa wersja Ice-T dla 8-bitowego Atari już dostępna - poprawki i nowe funkcje
Galactic Panic - nowa przygodówka na ST Darmowa gra point and click na Atari ST - ponad 100 ekranów przygody.
Nowa wersja ARIFE Tool od PVBest73 Uaktualniono uniwersalne narzędzie do analizy obrazów ROM i dysków Atari
Echa Sommarhack 2025 Podczas szwedzkiego party Sommarhack zaprezentowano kilkadziesiąt produkcji,
atari.area forum » Posty przez tebe
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
milo jest sie dowiedziec, ze sa jeszcze osoby ktorym zalezy :)
i tak natchniony nowa sila, zabieram sie za kodowanie :)
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
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.
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'
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
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 ?
pamietam ta gre, wlasnie przez ta czaszke
jak pierwszy raz wyskoczyla znienacka, az podskoczylem :)
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
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.
Dely dorzuc tyle ile trzeba, a ja Ci oddam jak sie spotkamy :)
Vasco ma w cholere mocy przerobowych, z nadmiaru wolnego czasu pali DVD x2 a moglby x8 ;)
G2F juz poprawilem, wiecej bledow nie znalazlem, teraz koncze super hiper assembler dla Atarci
tak, pamietam ten program, byl taki, ale nie wiem gdzie go mam :)
GHE to ten edytor w ktorym miala byc mozliwosc wstawienia grafiki i automatyczne otaczanie jej tekstem :)
ehh Casper, Casper tyle gadania o nic
a co to jest filtr dolnoprzepustowy ??
jakis przyklad ??
p*.* tetrisa :evil:
format tmc2 bedzie polimorficzny ;)
to by bylo cos :)
czyli mozna by zmiksowac w jednej linii grafike Hires z 4 kolorowa trybu 15OS , bez sztuczek ze zmiana rastra ?
wow Saboteur, wypadaloby teraz dokonac paru konwersji i przerzucic na XE/XL :) jedynie sluszną platforme 8)
A mostly Mac/65 compatible cross-assembler
http://www.cs.utah.edu/~schmelze/atari/atasm/index.html
hehe, jest i na PC MAC65
zdaje sie ze zapakowali do Commodore 128, cos takiego blittero podobnego
nie dziekuje, to taki zart odpowiedz na twoje zapytanie :)
jak w temacie :lol:
atari.area forum » Posty przez tebe
Wygenerowano w 0.104 sekund, wykonano 16 zapytań