Memory Full

Forum / Development

Orgams - Easy Build

m_dr_m * 16 Feb 2019 11:16:08

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).

m_dr_m * 17 Feb 2019 09:00:23

BTW FTW YMMV, that's a perfect example where improving OrGams and finishing a project may take less time than just finishing the project!

Hicks * 06 May 2019 12:49:44 * Modified at 12:50:48

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"

m_dr_m * 06 May 2019 18:32:17

« 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.

TotO * 08 May 2019 17:21:30 * Modified at 17:24:00

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.

m_dr_m * 24 Jun 2019 07:24:24

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

Hicks * 29 Jun 2019 11:35:08

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!

m_dr_m * 30 Jun 2019 15:09:16 * Modified at 15:09:33

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.

m_dr_m * 01 Jul 2019 10:22:47

« 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.

m_dr_m * 02 Jul 2019 10:25:17

« 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).