szkoda Tiger ze nie chcesz uzyc PC, bo dla takich utalentowanych gosci jak Ty powstal Graph2Font
no ale jesli to dla Ciebie zbyt prosta sprawa zawsze mozesz wylaczyc monitor ;) i zrobic pic ala Picasso
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
NGA 0.9.3. Nowatorski asembler 6502 NGA automatyzuje zarządzanie pamięcią 6502, wykrywając błędy w fazie budowy.
Elite FireBird dla Atari 8-bit Zakończono prace nad portem gry Elite w wersji FireBird dla 8-bitowych komputerów Atari.
CAS2Audio 1.0.7 Aktualizacja narzędzia CAS2Audio przynosi odświeżony interfejs i lepszą obsługę plików taśm.
AGI-ANTIC i King's Quest na Atari Silnik AGI-ANTIC przenosi klasyczne King's Quest I na małe Atari.
Nowy deasembler dla Atari ST Narzędzie rg-dis ułatwia deasemblowanie kodu dla komputerów Atari wyposażonych w procesory 68x.
atari.area forum » Posty przez tebe
szkoda Tiger ze nie chcesz uzyc PC, bo dla takich utalentowanych gosci jak Ty powstal Graph2Font
no ale jesli to dla Ciebie zbyt prosta sprawa zawsze mozesz wylaczyc monitor ;) i zrobic pic ala Picasso
jesli uzywasz Total Commandera (Windows Commandera) to sprawe zalatwi plugin
to ja tez nabije sobie licznik postow :)
to sobie poczytam, thx
Pajero mnie prosil abym zapytal o przyklady w asm obslugi HDD bez uzycia jakiegokolwiek DOS'a, czyli jak stwierdzic obecnosc KMK, SIO2IDE i jak odczytac sektor HDD przy ich pomocy.
Pewnie tak samo obsluguje sie jak stacje dyskow, przez SIO ($e453), na poczatku pewnie wyslac do kazdej stacji po kolei zadanie podania STATUSu i na tej podstawie odnalezc napedy miekkie i twarde. Juz kiedys pytalem sie jak rozpoaznac KMK i SIO2IDE wiec pewnie to znajde.
Pajero mi nie wierzy, wiec napiszcie czy mam racje :) czy sie myle z tym rozpoznawaniem i odczytem HDD.
na Zachodzie kupic, w Polsce ukrasc, proste prawda ;)
Abbuc nie jest straszny, ale Pinek i Bewu to mafia, wiec ich sie powinniscie bac, jak taki Pinek stanie w ciemnej uliczce to tylko jedno skojarzenie sie nasuwa ;)
o nastepny atarowiec z Poznania :)
no to juz wiem co mam dodac do asemblera, DATA, TEXT, BSS :) i pewnie REL aby zasygnalizowac ze piszemy relokowalny
Nowy format pliku binarnego ? Jak dotad jedynie Sparta udostepnia inny format plikow binarnych i potrafi go odczytac. Powstaje pytanie co bylo pierwsze kura czy jajko ? Najpierw powstaje format pliku binarnego a potem DOS, OS, czy może to niezbyt własciwa kolejnosc ?
Przyklad Lizarda:
.text
lda vfname
ldx vfname+1
jsr fopen
.data
vfname .rw fname ; relocatable word ;)
fname .by "D:nazwa.ext"
.text
fopen sta $0314
stx $0315 Jesli blok TEXT (jeden za drugim) zostanie umieszczony pod $2000, a blok DATA pod $9000, dodatkowo 'vfname' zostanie zmodyfikowane bo jest typu .rw to czy rozkazy w bloku TEXT odwolujace sie do 'vfname' tez zostana zmodyfikowane, powinny byc bo inaczej ten przyklad nie zadziala.
A czy nie prosciej byloby zalozyc, ze relokowalne sa wszystkie odwolania w obszarze bloku. Zakladamy ze program relokowalny miesci sie poza obszarem strony zerowej i w pewnych granicach pamieci, np. $0400-$BFFF
Jesli adresujemy w obrebie programu to te rozkazy beda poddane relokacji, poza w/w zdefiniowanym obszarem nie beda poddawane relokacji (w koncu nie mozemy dopuscic aby program ladowal sie np. na caly stos czy w inne obszary ktore potrzebuje OS do dzialania)
rel ; informacja dla asemblera, ze teraz leci relokowalny kod i zeby zaczal go kontrolowac
lda vfname ; relokowac bo adresowanie w obrebie programu
ldx vfname+1 ; relokowac bo adresowanie w obrebie programu
jsr fopen ; relokowac bo adresowanie w obrebie programu
vfname adr(fname) ; relokowac, bo to adres adr() czy tez .rw
fname .by "D:nazwa.ext" ; nie relokowac, bo zaden rozkaz
; nie odwoluje sie do 'fname', rozkazy typu adr i .rw nie sa brane pod uwage
fopen sta $0314 ; nie relokowac bo adresowanie poza programem
stx $0315 ; nie relokowac bo adresowanie poza programemAsembler domyslnie zasembluje od najmniejszego dozwolonego obszaru ($400), koniec sam okresli po asemblacji, jesli jakis tryb adresowania odwola sie ponizej $400 i powyzej dlugosci programu nie bedzie relokowalny, pojawi sie ostrzezenie. Ofsety do bajtow ktore maja zostac poddane relokacji zostana umieszczone w tablicy na koncu wczytywanego bloku razem z informacja czy modyfikowane jest 16bit czy 24bit.
OS zacznie czytac taki plik, odczyta naglowek, w ktorym bedzie informacja o dlugosci bloku i jego rodzaju w tym przypadku blok relokowalny. Na podstawie dlugosci bloku zarezerwuje obszar pamieci zaczynajacy sie od MEMLO, wczyta tam blok. OS zacznie czytac nastepny blok ktory jest tablica ofsetow. Procedury OS zaczna modyfikowac wczytany blok na podstawie tablicy ofsetow. W tablicy ofsetow powinna znalezc sie informacja czy ofset wskazuje na wartosc typu 16bit czy 24bit.
MY DOROŚLI ZACHOWUJEMY SIĘ INACZEJ 8)
chodzi Ci o tego buga dzieki ktoremu mozliwy jest HIP ? :)
super, hiper, scisle tajny rejestr odpowiedzialny za punkt G u Twojej dziewczyny :D
Wg mnie nalezaloby zlozyc 2-3 gotowe (dzialajace!) karty i wyslac po sztuce epiemu (neotracker, neoplayer) oraz Jaskierowi (theta).
Sluszna idea :)
Bo jak powiadaja, komputer bez oprogramowania to złom.
A gdzie znalezc Apple, mysle ze w Indiach :) W tamte rejony wysylaja kupe zlomy, a tubylcy odzyskuja metale szlachetne.
juz za momencik, juz za chwileczke asembler w stylu QA, Xasm z obsluga 65816, asemblowac juz asmebluje, jednak jest pare wyjatkow ktore trzeba uwzglednic
Antic wielordzeniowy w duzej obudowie :)
macie moje blogoslawienstwo
Vasco znowu za duzo wypil i dlatego tak pisze ;)
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 #$2000jeszcze 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
atari.area forum » Posty przez tebe
Wygenerowano w 0.091 sekund, wykonano 15 zapytań