MSX

References

  • http://map.grauw.nl/resources/msxbios.php
  • http://map.grauw.nl/resources/subrom.php
  • http://map.grauw.nl/resources/msxsystemvars.php
  • http://www.konamiman.com/msx/msx2th/th-ap.txt
  • http://www.angelfire.com/art2/unicorndreams/msx/RR-RAM.html
  • http://www.konamiman.com/msx/msx2th/kunbasic.txt
  • http://www.konamiman.com/msx/msx-e.html#nestorbasic
  • http://www.faq.msxnet.org/gfx9000.html
  • http://www.teambomba.net/gfx9klib.html
  • http://msxbanzai.tni.nl/v9990/manual.html
  • http://www.faq.msxnet.org/suffix.html
  • http://www.gamecastentertainment.com/forum/viewtopic.php?f=3&t=18#p53 (z80 asm code for accessing screen modes)

Library

for now, this is merelly about a small sketch of the msx1/2 (also 2+) msx-basic command used, and their z80 assembly similars - they are not accuraced and may need fixes and improvements.

  • cls - cls
    call 0x00c3     #-cls


```* color

sub msxcolor(v_ink as ubyte, v_paper as ubyte, v_border as ubyte): poke $F3E9,v_ink poke $F3EA,v_paper poke $F3EB,v_border end sub

```* vpoke

  sub msx1vpoke(v_address as uinteger,v_value as uinteger)
  asm
  ld h,(ix+5)
  ld l,(ix+4)
  ld a,(ix+6)
  call $004D
  end asm
  end sub

  sub msx2vpoke(v_address as uinteger,v_value as uinteger)
  asm
  ld h,(ix+5)
  ld l,(ix+4)
  ld a,(ix+6)
  call $0177
  end asm
  end sub


```* vpeek -    v_value= vpeek (v_address)
ld hl,v_address
call 0x004A    #-rdvrm
ld v_value,a

```* screen - screen v_screenmode,v_spritemode,v_click,v_printflag,v_?,v_?,v_?,v_?,v_?,v_?

    ld a,v_screenmode;call 0x005F     #- chgmod
    #- ld bc,0xE201:call WRTVDP - v_spritemode - ????
    ld (0xF3DB),v_click    #- cliksw
    ld (0xF416),v_prtflg    #- printflag


```* width -    width v_width
if (v_screenmode=0) then:
     ld (0xF3AE),v_width
     ld (0xF3B0),v_width
     end if
if (v_screenmode=1) then:
     ld (0xF3AF),v_width
     ld (0xF3B0),v_width
     end if

```* sprite$ - sprite$(v_spriteindex)=s_spritebitpmap$

    ld hl,(s_spritebitpmap$)
    ld de,0x3800+(v_spriteindex*32)
    ld bc,32
    call 0x005c   #- ldirvm


```* putsprite -    putsprite(v_id,v_x,v_y,v_layer,v_colour) - i don't know how to put sprites in screens 5 to 12
vpoke (0x1B00+(v_id*4)+0 ),v_y
vpoke (0x1B00+(v_id*4)+1 ),v_x
vpoke (0x1B00+(v_id*4)+2 ),v_layer
vpoke (0x1B00+(v_id*4)+3 ),v_colour

```* cls (msx2) - cls

    ld ix,0x0115    #- cls (subrom)
    call 0x015C     #- subrom


```* setpage (msx2) -    setpage v_dpage,v_apage (?)
ld [0xFAF5],v_dpage    #- dppage
ld [0xFAF6],v_apage    #- acpage
ld ix,0x013D    #- setpag (subrom)
call 0x015C     #- subrom

```* palette (gfx9000)

  sub msxgfx9kpalette(tidx as ubyte,tpr as ubyte,tpg as ubyte,tpb as ubyte):
  '- this code seems not acuraced yet
  out $64,14
  out $63,(tidx mod 64)*4
  out $61,tpr
  out $61,tpg
  out $61,tpb
  end sub


```* screen (gfx9000)

sub msxgfx9kscreen(tscm6 as ubyte,tscm7 as ubyte): '- this code seems not acuraced yet out $64,6 out $63,tscm6 out $64,7 out $63,tscm7 out $67,1 end sub

* vpoke (gfx9000) sub msxgfx9kvpoke(tadr as udouble, tvl as ubyte): '- this code seems not acuraced yet out $64,0 tvou=tadr band 255:tvou=int(tvou/256) out $63,tvou tvou=tadr band 255:tvou=int(tvou/256) out $63,tvou tvou=tadr band 255:tvou=int(tvou/256) out $63,tvou out $60,tvl end sub