SymbOS MSX multitasking operating system - help needed!

Страница 5/394
1 | 2 | 3 | 4 | | 6 | 7 | 8 | 9 | 10

By Prodatron

Paragon (1788)

Аватар пользователя 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.

By flyguille

Prophet (3029)

Аватар пользователя 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

By k0ga

Expert (77)

Аватар пользователя 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.

By Prodatron

Paragon (1788)

Аватар пользователя 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)?

By Edwin

Paragon (1182)

Аватар пользователя 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)

By ARTRAG

Enlighted (6285)

Аватар пользователя 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

By AuroraMSX

Paragon (1901)

Аватар пользователя 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

By Prodatron

Paragon (1788)

Аватар пользователя Prodatron

12-05-2006, 14:27

Thank you very much! Smile

By Prodatron

Paragon (1788)

Аватар пользователя 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.

By Prodatron

Paragon (1788)

Аватар пользователя Prodatron

13-05-2006, 15:22

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

Страница 5/394
1 | 2 | 3 | 4 | | 6 | 7 | 8 | 9 | 10