SymbOS MSX multitasking operating system - help needed!

Pagina 5/394
1 | 2 | 3 | 4 | | 6 | 7 | 8 | 9 | 10

Van Prodatron

Paragon (1788)

afbeelding van Prodatron

11-05-2006, 23:23

Ah, ok, so the sprites will also stay with a ratio of 1:1? Meaning, that a pixel pixel is like 2 screen pixels?
Hope that it will be ok for a mouse pointer in mode 6.

Van flyguille

Prophet (3029)

afbeelding van flyguille

11-05-2006, 23:39

yes, it is correct

in screen 5 / 8 is 1:1 ratio

in screen 6 / 7 is 2:1 ratio

Van k0ga

Expert (77)

afbeelding van k0ga

12-05-2006, 11:35

Hm, I couldn't stop. Logical Copy made it to about 2500 4x8 blocks (this is the average size of a char in SymbOS) in one second (I hope I didn't make a mistake). This is about 1,7 times faster than on the CPC! Smile I hope the final routine won't be much slower, but as the Z80 and the VDP can work parallel I don't see a big problem here.

A fast copy of 8x8 consume about 702 z80 cycles, so you can do a lot of things while you are waiting vdp command ending. Unique problem for real pararell process is non end of command feature in v9938. I was thinking in this trouble long time ago, and unique solution allowing this can be using line interrupt to generate interrupts to measure time waste in the 8x8 copy. I know that is a nasty solution, but this workaround could save a lot of time and free z80 to realize other tasks.

Van Prodatron

Paragon (1788)

afbeelding van Prodatron

12-05-2006, 13:07

Again a quick question:
Currently I am loading and executing the binary with a basic program (autoexec.bas). The binary would be limited to less than 32K I think.
Someone already wrote in another thread, that I can move the basic memory to #c000 and do bankswitching for page 2 (#8000-#bfff). In this case I could load several 16K binaries in the extended memory before executing the code.
So how can I move the basic memory to #c000 (while the basic program is running)?

Van Edwin

Paragon (1182)

afbeelding van Edwin

12-05-2006, 13:21

You can't do it for a running program directly, but you can start a new loader after you changed the address from autoxec.bas. (or the same loader if you do the move/run inside an if)

Van ARTRAG

Enlighted (6243)

afbeelding van ARTRAG

12-05-2006, 13:23

You can do more than this
if you move the basic program at C000h
using the pagemapper at 8000h you can
access to the full ram.

the steps are

run the autoexec.bas
your autoexec.bas move the basi at c000h
and load a loader.bas

the loader is loaded and executed at c000h
during its execution the loader load and swap
each page at 8000 untill alla the ram is full

Van AuroraMSX

Paragon (1901)

afbeelding van AuroraMSX

12-05-2006, 13:52

So how can I move the basic memory to #c000 (while the basic program is running)?
There's a system variable which indicates the starting address of BASIC. IIRC, it's at address #F676. So you could create a loader with a starting line like this:

5 ' Autoexec.bas
10 IF PEEK(&HF677)=&HC0 THEN 40
20 POKE &HC000,0: POKE &HC001,0: POKE&HF677,&HC0 ' Move BASIC to page 3
30 RUN"Autoexec.bas" ' reload and run myself at new BASIC start address
40 ' ...rest of program goes here...

You can of course combine lnes 10-30 into one oneliner.
This format gave me the opportuniy to include some useful (?) comments Smile

Van Prodatron

Paragon (1788)

afbeelding van Prodatron

12-05-2006, 14:27

Thank you very much! Smile

Van Prodatron

Paragon (1788)

afbeelding van Prodatron

13-05-2006, 15:16

Again a question regarding basic: If I use Auroras program, what is the maximum amount of bytes I can load with BLOAD (starting from #8000)? Seems that 31KB is too much.

Van Prodatron

Paragon (1788)

afbeelding van Prodatron

13-05-2006, 15:22

...and is there any chance to load data in basic somewhere between #0000 and #7fff??

Pagina 5/394
1 | 2 | 3 | 4 | | 6 | 7 | 8 | 9 | 10