As per popular demand by unpopular people, Orgams should help to generate any program in its final form, by just pressing one key or two.
Let's discuss that here and summarize the ideas
there (There is already an example of a possible workflow).
BTW FTW YMMV, that's a perfect example where improving OrGams and finishing a project may take less time than just finishing the project!
The first scenario seems more realistic to start.
So the first question is: do you plan to release a version of CPC_T allowing to crunch a memory range instead of a file? Even if this new version is close from CPC_T 3.1 on the crunching side! The main drawback was: really slow when you are crunching a big file (more than 16k), especially the last method.
Everything with the X-MASS = instantaneous load/write!
"On en a rêvé, Toto l'a fait"
« CPC_T allowing to crunch a memory range »
Yes this it planed with the next CPC_T this autumn around Christmas.
It would be pretty to do for the current version, but that doesn't seems urgent.
DOSes on X-Mass aren't quite instantaneous. Ramdisc and Romdisc might be useful as well.
That bring the question of how to access them. Offset had some vision about mounting, but I'm not sure how it would work from the user perspective.
Instantaneous compared to a Floppy disc? ^^
RAM Drive isn't too.. Just a little faster. But, who care?
ROM Drive is a strange idea, because the flash process took time and no DOS support it.
As you may know, Orgams can assemble in firmware zone or screen (the only caveat is that 30-32, BE00-BE39 and some byte around the default stack are overwritten).
So one might ask (maybe me) what should be done in such situation for |orgass, as we don't want to trash the firmware.
One solution:
|orgass,0 ; Store the infringing parts in work banks, automatically retrieved by a subsequent |orgsave or |orgjump.
|orgass,1 ; No special precaution (mimic CONTROL-1). Alea jacket est.
|orgass,2 ; No special precaution, but that doesn't matter since we jump immediately (mimic CONTROL-2).
WDYT?
Yours truly,
mödröm
Very specific situation, I confess that I don't know what is the best solution. But I think that your proposition is full of wisdom!
I plan to introduce CODE/NOCODE directives à la Maxam http://www.cpcwiki.eu/index.php/Maxam_1.5. Rather PRAGMA CODE / PRAGMA NOCODE actually.
It would allow to use symbols of preassembled modules.
E.g. player.o:
get included = 0
if included:PRAGMA NOCODE:end
init
[...]
iter
[...]
psg skip 14
main.o:
load "player.bin" ; Assembled code
import "player" included:=1
call player.init
[...]
call player.iter
[...]
ld hl,player.psg
When included, no code would be emitted, but the symbols would be assigned properly.
That saves a jump table, and would be handy when they are a lot of addresses and constants to share.
Comments are welcome.
« The only caveat is that 30-32, BE00-BE39 are overwritten. »
Actually there are not at assembling time, only at return time. See bug #E2.
You can use those addresses for your program.
« import "player" included:=1 »
Actually the syntax would rather be:
import "player" SET included=1
1/ To mimic the scripted version:
|ORGOPEN,"player"
|ORGSET,"included",0
|ORGASS
2/ For symmetry. player.o:
GET included = 0
GET nb_fx = 4
GET test_mode = 0
GET use_smr = 0
main.o
import "player" [
SET included = 1
SET nb_fx = 2
SET test_mode = 1
; use_smr not set, will use default (0)
]
3/ SET test_mode could be a shortcut for SET test_mode = test_mode, where the first label belongs to the imported source, and the second one to the host source (flag propagation).