Comments (11)
Moje rozwiązanie
Zacznę może od tego, jak odpowiedź znalazłem.
Podczas kompilacji pliku A65 przez MADSA, może on generować listę wszystkich etykiet, jakie są wykorzystane w pliku źródłowym A65.
Właśnie tam udało mi się znaleźć odwołania do etykiet z pliku zasobu data.asm
. Wygląda to tak:
...
00 209E RESOURCE.RESOURCE.RCASM12.RESOURCE.DATA
00 C000 RESOURCE.RESOURCE.RCASM12.RESOURCE._SFX_API.SFX_DATA_ADDR
00 C000 RESOURCE.RESOURCE.RCASM12.RESOURCE._SFX_API.SFX_DATA_ADDR.DATA
00 C000 RESOURCE.RESOURCE.RCASM12.RESOURCE._SFX_API.SFX_DATA_ADDR.DATA_SFX_0
00 C014 RESOURCE.RESOURCE.RCASM12.RESOURCE._SFX_API.SFX_DATA_ADDR.DATA_SFX_1
...
Wprowadziłem te etykiety do pliku mole.asm
:
sfxptr
dta a(RESOURCE.RESOURCE.RCASM12.RESOURCE._SFX_API.SFX_DATA_ADDR.data_sfx_0) ; offset in data 0000 optimized 1=>0
dta a(RESOURCE.RESOURCE.RCASM12.RESOURCE._SFX_API.SFX_DATA_ADDR.data_sfx_1) ; offset in data 0014 optimized 2=>1
I to pozwoliło, skompilować kod do końca i prawidłowo.
Co mnie w tym gryzie?
Uzależnienie od czynników kompilacji źródeł MP.
Zakładam, że, jeżeli zmieniona zostanie kolejność "wywołania" zasobów, zmieni się również liczba porządkowa dla RESOURCE.RESOURCE.RCASMxx
. Więc nie można "ufac" takiemu rozwiązaniu problemu.
Poza tym. Ścieżka przestrzeni nazw do zasobu jest niesamowicie długa w dodatku przekombinowana.
from mad-pascal.
Jak bym to widział ja.
Skoro i tak, każdy zasób rcasm
ma dedykowaną przestrzeń nazw, tj. w powyższym przypadku jest to _SFX_API.SFX_DATA_ADDR
to po co numerować RCASMxx
.
Ok. Zauważyłem, że dla każdego RCASMxx
deklarowana są jeszcze dodatkowe etykiety:
RCASM12.RESOURCE.LEN
RCASM12.RESOURCE.MCPY
RCASM12.RESOURCE.DATA
Nie dałoby się tego jakoś związać z etykietą _SFX_API.SFX_DATA_ADDR
, i ogólnie uprościć ścieżkę? Np:
RESOURCE.RCASM._SFX_API.SFX_DATA_ADDR_LEN
RESOURCE.RCASM._SFX_API.SFX_DATA_ADDR_MCPY
RESOURCE.RCASM._SFX_API.SFX_DATA_ADDR_DATA
Serio. To wygląda znacznie lepiej i jest bardziej intuicyjne dla programisty.
Nawet w trakcie debugowania (pod Altirrą), będzie wygodniejsze, bo krótsze i czytelniejsze.
from mad-pascal.
Drogi użytkowniku.
W imieniu autora i kontrybutorów projektu pragnę Cię poinformować, że przyjrzeliśmy się zgłoszeniu i jesteśmy na etapie dyskusji nad możliwością zrealizowania Twojej propozycji.
Niestety w naszej grupie nie zapadł jeszcze konsensus w tej sprawie.
@tebe6502 jako główny programista jest oczywiście bardzo chętny popracować nad tym, niestety jest przeze mnie powstrzymywany bo mam pewne zastrzeżenia.
Niestety to nie miejsce na upublicznianie naszych wewnętrznych przepychanek.
Jeżeli chciałbyś przekonać nas do swojego rozwiązania to proponuję do zgłoszenia dołączyć PR z kodem, wtedy nasza dyskusja nad rozwiązaniem problemu może się uprościć od strony technicznej.
z wyrazami szacunku
Bartek
from mad-pascal.
.def :label
tworzy etykietę w głównej przestrzeni nazw, dzięki czemu będzie widziana z każdego miejsca
.def :data_sfx_0 ; KEY CLEAN LONG
.by $7C $A6 $00 $A5 $00 $A4 $01 $A3 $00 $A3 $00 $A3 $3F $A3 $00 $A3
.by $00 $A3 $83 $00
; address: $C014 (offset: $0014)
.def :data_sfx_1 ; KEY CLEAN ECHO
.by $7C $A6 $00 $A5 $00 $A4 $00 $A3 $00 $A2 $00 $A1 $80 $00
from mad-pascal.
http://mads.atari8.info/pl/skladnia/
rodział: Globalne
from mad-pascal.
@Tebe - to zła praktyka, by biblioteka lokowała etykiety w głównej przestrzeni nazw, a tym bardziej zasób. Ma od tego lokalna przestrzeń, by tam były i z niej korzystać.
@zbyti Nie wiem co to jest PR z kodem 🥺
from mad-pascal.
wszystko o czym pisze nie jest przymusem. To propozycje, które wcale nie muszą być jakkolwiek rozpatrzane - ja się dostosuje, najwyżej... zwalę trochę obowiązków na użytkownika końcowego. 😉
from mad-pascal.
@GSoftwareDevelopment https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests
from mad-pascal.
każdy typ zasobu ma dedykowane makro, które jest wywoływane, w przypadku RCASM (plik BASE\ATARI\RESOURCE.ASM)
/* ----------------------------------------------------------------------- /
/ RCASM
/* ----------------------------------------------------------------------- */
.macro RCASM (nam, lab)
org RESORIGIN
len = .sizeof(_%%2)
mcpy ift main.%%lab+len >= $bc20
mva #0 sdmctl
sta dmactl
eif
jsr sys.off
memcpy #data #main.%%lab #len
jmp sys.on
data
.local _%%2, main.%%lab
icl %%1
.endl
.print '$R RCASM ',main.%%lab,'..',main.%%lab+len-1," %%1"
ini mcpy
.endm
from mad-pascal.
@zbyti Dzięki za możliwość (samodzielnego) rozwoju projektu, ale nie skorzystam. Powód jest prosty: Nie mam czasu "studiować" kodu kompilatora i zasad jego działania. I może na tym poprzestanę, gdyż (jak to napisałeś) "...to nie miejsce na upublicznianie naszych wewnętrznych przepychanek." - na szczęście.
Nie mam zamiaru psuć dobrego imienia Waszego, ani Projektu.
Pozrawiam i... zamykam wątek.
from mad-pascal.
Pozrawiam i... zamykam wątek.
Dziękuję w imieniu swoim i zespołu!
from mad-pascal.
Related Issues (20)
- Compiler directives $info $warning $error not working as expected
- Determining the location (in memory) for STATICDATA
- The compiller requires write access to library files for compilation (?) HOT 2
- Incorrect algorithm in the prime numbers calculation benchmarks HOT 2
- [Feature] ORGIN directive HOT 1
- [Optimizing] Extra jump to the correct part of the procedure when there are sub-functions in the function/procedure. HOT 3
- Adding brackets to object function yields unhandled exception? HOT 1
- Phase error detection code safe to alter? HOT 1
- Very slow compile time with StrToInt? HOT 3
- No error on pointers to undeclared types HOT 1
- two peeks with an and clause might compile wrongly?
- mad pascal optimizes indexing wrong HOT 10
- Commander X16 target support HOT 3
- 1.6.8 still marked as "Latest" stable release instead of 1.6.9 ... is this intentional? HOT 2
- Random of a 'formula' HOT 5
- Neo6502: Illegal addressing mode (CPU 65816) HOT 1
- The sysutils unit cannot be compiled for target raw. HOT 2
- Neo6502 - concat don't work properly HOT 13
- Problem locating units on OSes with case sensitive file names
- procedure aling not workiong properly HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mad-pascal.