blog:pc98_devcode

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revisionBoth sides next revision
blog:pc98_devcode [2020/08/22 10:22] – [Packed-Pixel or Chunky Video Modes] johnblog:pc98_devcode [2020/08/22 10:35] – [NEC PC-98 C Code Examples] john
Line 3: Line 3:
 So you've got your NP21Kai PC-98 emulator up and running, or you've resurrected an ancient NEC PC-9801 or PC-9821 and you've decided you want to do some C programming for it. So you've got your NP21Kai PC-98 emulator up and running, or you've resurrected an ancient NEC PC-9801 or PC-9821 and you've decided you want to do some C programming for it.
  
-Where do you start? Well, first, get a working development environment up and running. [[blog:pc98_devtools|You can get one here]]. +Where do you start? Well, first, get a working development environment up and running. [[blog:pc98_devtools|You can get one here on the development tools page]]. 
  
 Next you will want to figure out how to do some interesting things with the hardware, as otherwise it's just a normal command line DOS machine.... Next you will want to figure out how to do some interesting things with the hardware, as otherwise it's just a normal command line DOS machine....
 +
 +===== Pre-Requisites =====
 +
 +After [[blog:pc98_devtools#makefiles_Compiling|compiling]] your code, your application will need the following to run:
 +
 +     * A VCPI memory mapper running (EMM386, VEMM486 or similar)
 +     * A DPMI server running
 +     * A copy of GO32-V2.exe in the same directory as your application
 +
 +The VCPI memory mapper should be started at boot, but the DPMI server only needs to be run at the time your application starts.
 +
 +A copy of DPMI.EXE and GO32-V2.EXE are including on the development tools page.
 ===== Non-hardware Specific Examples ===== ===== Non-hardware Specific Examples =====
  
Line 229: Line 241:
 </code> </code>
  
-It is this section of code which I used to test the functionality of the various DPMI services on PC-98 DOS. The only one which would correctly return all of the various //__dpmi// calls was the **MS-DOS 6.22 DPMI.EXE**. There may be other third party DPMI services, but since this one comes with DOS itself, it's probably the easiest (and most reliable) one to obtain.+It is this section of code which I used to test the functionality of the various DPMI services on PC-98 DOS. The only one which would correctly return all of the various dpmi calls was the **MS-DOS 6.22 DPMI.EXE**. There may be other third party DPMI services, but since this one comes with DOS itself, it's probably the easiest (and most reliable) one to obtain.
  
 //Note: You may want to create your DPMI memory info structure (__vram_dpmi__) and VRAM selector object (__vram_dpmi_selector__) as globals, since anything writing to the framebuffer (see next example, below) will need to access them.// //Note: You may want to create your DPMI memory info structure (__vram_dpmi__) and VRAM selector object (__vram_dpmi_selector__) as globals, since anything writing to the framebuffer (see next example, below) will need to access them.//
Line 243: Line 255:
    * _farpokeb(), _farpokew(), _farpokel()  - To set individual bytes (8), short (16) or long (32) words    * _farpokeb(), _farpokew(), _farpokel()  - To set individual bytes (8), short (16) or long (32) words
    * _farpeekb(), _farpeekw(), _farpeekl()  - To get individual bytes, short or long words    * _farpeekb(), _farpeekw(), _farpeekl()  - To get individual bytes, short or long words
-   * [[http://www.delorie.com/djgpp/doc/libc/libc_583.html|movedata()]] - To transfer contiguous blocks of memory+   * [[http://www.delorie.com/djgpp/doc/libc/libc_583.html|movedata]] - To transfer contiguous blocks of memory
  
 You //can//, therefore write directly to the framebuffer if you wish, but it's probably easier to create a local buffer which you write into first, compositing all of your display elements, and then transfer the entire buffer in one operation to the framebuffer hardware. You //can//, therefore write directly to the framebuffer if you wish, but it's probably easier to create a local buffer which you write into first, compositing all of your display elements, and then transfer the entire buffer in one operation to the framebuffer hardware.
  • blog/pc98_devcode.txt
  • Last modified: 2020/08/22 10:48
  • by john