I am stuck with "I cant even vpoke".
I code openmsx.
The below code ends up with vram pointer at 0x400001
If one removes the vram write with out &h60, pointer is at 0x7c0000 where I set it up.
Mirror a 7c to 40 is funny.
The nametable is said to be up there and I cant get at it.
The register setup I copied from xtazy.
1 out &h6f,0 'init 10 for i = 0 to 23 : read a 12 out (&h64),128+i 'register write mode: 128 + register number 14 out (&h63),a 16 next 100 p = &h7C : a = 0 : gosub 10000 : out &h60,1 110 'for i = 0 to 767 : out &h60,(i+1) and 255 : next 120 'for i = 0 to 767 : out &h60,0 and 255 : next 130 'p = &h7E : a = 0 : gosub 10000 140 'for i = 0 to 767 : out &h60,0 and 255 : out &h60,0 and 255 : next 200 'p = &h00 : a = 0 : gosub 10000 210 'for y = 0 to 7 : for x = 0 to 31 : for i = 0 to 7 : out &h60,0 : next i,x,y 220 'p = &h40 : a = 0 : gosub 10000 230 'for y = 0 to 7 : for x = 0 to 31 : for i = 0 to 7 : out &h60,0 : next i,x,y 9990 beep : sound 8,12 : for i = 1 to 2000 : next : beep 9999 stop 10000 'vram write address = p*65536 + a 10005 out (&h64),0 'vram write mode: 0 10010 out (&h63),a and 255 10020 out (&h63),(a / 256) and 255 10030 out (&h63),p 'bit 7 address increment inhibit 10050 return 20000 'regs 20010 'data 0,0,4,0 20020 'data 0,0,&h82,0 20030 'data &hc2,0,0,0 20040 'data 0,&h40,0,0 20050 'data 0,0,0,0 20060 'data 0,&h3b,5,0 21000 'regs 21010 data 0,0,0,0 21020 data 0,0,&h05,0 21030 data &h82,0,0,0 21040 data 0,&h04,&h04,0 21050 data 0,&h80,&h80,0 21060 data &h18,&h40,0,0 50000 'Physical mapping: Addresses 00000-3FFFF in VRAM0 and 40000-7FFFF in VRAM1. 50010 '00000-3FDFF (Sprite) Pattern Data (Layer A) 50020 '3FE00-3FFFF Sprite Attribute Table 50030 '40000-7BFFF Pattern Data (Layer B) 50040 '7C000-7DFFF PNT(A) - Pattern Name Table (Layer A) 50050 '7E000-7FFFF PNT(B) - Pattern Name Table (Layer B)
ok forget it. I noob read the addresses wrong. back to the drawing board.
I did read (on msx banzai) that powerbasic is a modification of turbobasic (basic kun) and someone modified the graphic commands to make it compatible with gfx9000, but it only works on r800. That is all I know.
If there is a rom version which works on msx2, where can I find it?? I am most interested in it!
Here's this rom : http://www.msxblue.com/temp2/powerbasic.zip
Not tested, but probably only for TurboR ...
At first sight, it can be divided in 3 parts :
Offset 0000 to offset 7FFF = modified version of BIOS+BASIC TurboR GT (version 4.2 of BASIC !)
Offset 8000 to offset BFFF = GFX-9000 BASIC version 4.1 is mentioned in modified version of turboR ext.rom
Offset C000 to offset FFFF = X-BASIC modified to support GFX-9000
Thank you! I will test it right now!
ok forget it. I noob read the addresses wrong. back to the drawing board.
Interesting, hit9918, please keep sharing with us your advances
ok, this is embarassing...
I am testing the powerbasic rom on openmsx but nothing happens.
I am guessing the rom must be enabled by writting some code or it has to be loaded in a specific way (I tested all the mappers on openmsx).
I am sorry I am so useless with hardware and ASM... (I just enjoy creating videogames, anything beyond this is just a headdick for me, I am completelly clueless)
Any help?
I think you need to create a new TurboR machine in openMSX as the BIOS/BASIC and EXT roms are modified (and probably EXT and XBASIC roms need to remain together in the same subslot, but it's just a guessing).
Maybe someone of the openMSX team could help you. I know that creating a TurboR machine in openMSX is a pain in the ass, because some limitations have been implemented for TurboR machines to block using of small roms as in blueMSX instead of the big firmware rom that actually includes the small roms.
That is a good idea, mars, thanks.
The idea is to make it work on a msx2, but offcourse first I will try to make it work on turbo-r.
Anyway, even if I manage to make it work on openmsx, the problem will be to make it work on a real msx.
I flashed the rom on a flashable cartridge and the results are the same: a whole bunch of nothing.
This will not be easy, I see...
Thank you for your help! I very much appreciate it
ok I got a demo that sorts out charset and nametable in plain BASIC.
frustrating hours because one doesn't know.
done that, it is all the same patterns again as known from 9958.
the 9990 has much more, but not in lots bells and whistles, but in one big mechanism.
edit: sprites added. a whole screen wide, ok?
their patterns are same location as charset of top layer.
1 out &h6f,0 'init superimpose 10 for i = 0 to 23 : read a 12 out (&h64),128+i 'register write mode: 128 + register number 14 out (&h63),a 16 next 60 for i = 0 to 15 'palette 61 out (&h64),128+14 : out (&h63),i*4 70 out (&h61),i*2 : out (&h61),i*2 : out (&h61),i*1 + 13 80 next 100 p = 0 : a = 0 : gosub 10000 'charset in screen 5 format 110 for y = 0 to 15 'init two row of chars 115 for x = 0 to 31 : for i = 0 to 3 : out &h60,(x and 15)*17 : next i,x,y 200 p = 4 : a = 0 : gosub 10000 'second charset in screen 5 format 210 for y = 0 to 7 'init one row of chars 215 for x = 0 to 31 : for i = 0 to 3 : out &h60,((x+y) and 15)*17 : next i,x,y 299 '16bit nametable little endian 300 for y = 0 to 25 310 p = 7 : a = &hc000+64*2*y : gosub 10000 '64 chars wide, 2 byte per char 320 for x = 0 to 31 330 out &h60,x and 15 : out &h60,0 340 next x,y 399 'lower layer 16bit nametable little endian 400 for y = 0 to 25 410 p = 7 : a = &he000+64*2*y : gosub 10000 420 for x = 0 to 31 430 out &h60,0 and 15 : out &h60,0 440 next x,y 500 'sprite attribute table, 4 bytes per sprite: Y, pattern, X, todo(x high?) 510 p = 3 : a = &hfe00 : gosub 10000 515 for i = 0 to 15 520 sy = int(sin(i*2*3.1415926/16)*5+100) : ? sy 525 out &h60,sy : out &h60,2 : out &h60,i*16+3 : out &h60,0 530 next 9990 beep : sound 8,12 : for i = 1 to 2000 : next : beep 9999 stop 10000 'vram write address = p*65536 + a . out &h60 vpokes with autoincrement. 10005 out (&h64),0 'vram write mode: 0 10006 defusr1 = a 'to get at H,L 10010 xx = peek(&hf39c) : out (&h63),xx : '?xx; 10020 xx = peek(&hf39d) : out (&h63),xx : '?xx;"." 10030 out (&h63),p 'bit 7 address increment inhibit 10050 return 21000 'regs 21010 data 0,0,0,0 21020 data 0,0,&h05,0 21030 data &h82,0,0,0 21040 data 0,0,0,0 21050 data 0,0,0,0 21060 data 0,0,0,0 21070 data 0 50000 'Physical mapping: Addresses 00000-3FFFF in VRAM0 and 40000-7FFFF in VRAM1. 50010 '00000-3FDFF (Sprite) Pattern Data (Layer A) 50020 '3FE00-3FFFF Sprite Attribute Table 50030 '40000-7BFFF Pattern Data (Layer B) 50040 '7C000-7DFFF PNT(A) - Pattern Name Table (Layer A) 50050 '7E000-7FFFF PNT(B) - Pattern Name Table (Layer B)
maybe not the best question from me ever but does anyone have a link to a very detailed documentation on how to code for the V9990? Think something like the V9938 programmers guide.