sgdk
z80_ctrl.h File Reference

Z80 control. More...

Go to the source code of this file.

Defines

#define Z80_HALT_PORT   0xA11100
#define Z80_RESET_PORT   0xA11200
#define Z80_RAM_START   0xA00000
 Z80 RAM start address.
#define Z80_RAM_END   0xA01FFF
 Z80 RAM end address.
#define Z80_RAM   Z80_RAM_START
 Z80 RAM address.
#define Z80_RAM_LEN   ((Z80_RAM_END - Z80_RAM_START) + 1)
 Z80 RAM length in byte.
#define Z80_YM2612   0xA04000
 Z80 YM2612 port address.
#define Z80_BANK_REGISTER   0xA06000
 Z80 Bank register address.
#define Z80_DRV_COMMAND   0xA00100
 Z80 default driver command address.
#define Z80_DRV_STATUS   0xA00102
 Z80 default driver status address.
#define Z80_DRV_PARAMS   0xA00104
 Z80 default driver parameters address.
#define Z80_DRV_COM_PLAY_SFT   0
#define Z80_DRV_COM_STOP_SFT   4
#define Z80_DRV_STAT_PLAYING_SFT   0
#define Z80_DRV_STAT_READY_SFT   7
#define Z80_DRV_COM_PLAY   (1 << Z80_DRV_COM_PLAY_SFT)
 Z80 default driver play command.
#define Z80_DRV_COM_STOP   (1 << Z80_DRV_COM_STOP_SFT)
 Z80 default driver stop command.
#define Z80_DRV_STAT_PLAYING   (1 << Z80_DRV_STAT_PLAYING_SFT)
 Z80 default driver play status.
#define Z80_DRV_STAT_READY   (1 << Z80_DRV_STAT_READY_SFT)
 Z80 default driver ready status.
#define Z80_DRV_CH0_SFT   0
#define Z80_DRV_CH1_SFT   1
#define Z80_DRV_CH2_SFT   2
#define Z80_DRV_CH3_SFT   3
#define Z80_DRV_CH0   (1 << Z80_DRV_CH0_SFT)
 Z80 default driver channel 0 id.
#define Z80_DRV_CH1   (1 << Z80_DRV_CH1_SFT)
 Z80 default driver channel 1 id.
#define Z80_DRV_CH2   (1 << Z80_DRV_CH2_SFT)
 Z80 default driver channel 2 id.
#define Z80_DRV_CH3   (1 << Z80_DRV_CH3_SFT)
 Z80 default driver channel 3 id.
#define Z80_DRIVER_NULL   0
 NULL Z80 driver.
#define Z80_DRIVER_PCM   1
 Variable rate sample player Z80 driver.
It can play a sample (8 bit signed) from 8 Khz up to 32 Khz rate.
#define Z80_DRIVER_2ADPCM   2
 2 channels PCM sample player Z80 driver.
It can mix 2 samples (4 bit PCM) at a fixed 22 Khz rate.
#define Z80_DRIVER_4PCM   4
 4 channels sample player Z80 driver with envelop control.
It can mix 4 samples (8 bit signed) at a fixed 16 Khz rate
and handle volume (16 levels) for each channel.
#define Z80_DRIVER_4PCM_ENV   Z80_DRIVER_4PCM
#define Z80_DRIVER_XGM   5
 eXtended VGM music player driver.
This driver takes VGM (or XGM) file as input to play music.
It supports 4 PCM channels at a fixed 14 Khz and allows to play SFX through PCM with 16 level of priority.
The driver is designed to avoid DMA contention when possible (depending CPU load).
#define Z80_DRIVER_CUSTOM   -1
 CUSTOM Z80 driver.
#define Z80_DRIVER_DEFAULT   Z80_DRIVER_XGM

Functions

void Z80_init ()
 Initialize Z80 sub system.
bool Z80_isBusTaken ()
 Return Z80 BUS taken state.
void Z80_requestBus (bool wait)
 Request Z80 BUS.
bool Z80_getAndRequestBus (bool wait)
 Request Z80 BUS if not yet taken.
void Z80_releaseBus ()
 Release Z80 BUS.
void Z80_startReset ()
 Start Z80 reset.
void Z80_endReset ()
 End Z80 reset.
void Z80_setBank (const u16 bank)
 Set Z80 memory bank.
u8 Z80_read (const u16 addr)
 Read Z80 memory (Z80_RAM).
void Z80_write (const u16 addr, const u8 value)
 Write to Z80 memory (Z80_RAM).
void Z80_clear (const u16 dest, const u16 size, const bool resetz80)
 Clear Z80 memory.
void Z80_upload (const u16 dest, const u8 *data, const u16 size, const bool resetz80)
 Upload data in Z80 memory.
void Z80_download (const u16 from, u8 *dest, const u16 size)
 Read data from Z80 memory.
u16 Z80_getLoadedDriver ()
 Return currently loaded Z80 driver.
void Z80_unloadDriver ()
 Unload Z80 driver (actually clear Z80 ram).
void Z80_loadDriver (const u16 driver, const bool waitReady)
 Load a Z80 driver.
void Z80_loadCustomDriver (const u8 *drv, u16 size)
 Load a custom Z80 driver.
u16 Z80_isDriverReady ()
 Return driver ready state (only for non custom driver).

Detailed Description

Z80 control.

Author:
Stephane Dallongeville
Date:
08/2011

This unit provides Z80 access from the YM2612 :

  • enable / disable Z80
  • request / release Z80 BUS
  • upload / download data to / from Z80 memory
  • set Z80 external Bank
  • Z80 driver handling

Function Documentation

void Z80_clear ( const u16  dest,
const u16  size,
const bool  resetz80 
)

Clear Z80 memory.

Parameters:
destDestination address (Z80 memory).
sizeSize in byte of region to clear.
resetz80Reset Z80 if set to TRUE.
void Z80_download ( const u16  from,
u8 dest,
const u16  size 
)

Read data from Z80 memory.

Parameters:
fromSource address (Z80 memory).
destDestination where to write data.
sizeSize in byte of data to read.
bool Z80_getAndRequestBus ( bool  wait)

Request Z80 BUS if not yet taken.

Parameters:
waitWait for BUS request operation to complete.
Returns:
Z80 BUS taken state before calling the function.
u16 Z80_getLoadedDriver ( )

Return currently loaded Z80 driver.

Possible returned values are:

void Z80_init ( )

Initialize Z80 sub system.

Request Z80 BUS and reset bank number.

void Z80_loadCustomDriver ( const u8 drv,
u16  size 
)

Load a custom Z80 driver.

Parameters:
drvPointer to the driver binary to load.
sizeSize (in bytes) of the driver binary.
void Z80_loadDriver ( const u16  driver,
const bool  waitReady 
)

Load a Z80 driver.

Parameters:
driverDriver to load, possible values are:
waitReadyWait for driver to be ready.
u8 Z80_read ( const u16  addr)

Read Z80 memory (Z80_RAM).

Parameters:
addrAddress to read (relative to start of Z80_RAM).

You need to request Z80 BUS to access Z80 memory.

See also:
Z80_requestBus(u16)
void Z80_requestBus ( bool  wait)

Request Z80 BUS.

Parameters:
waitWait for BUS request operation to complete.
void Z80_setBank ( const u16  bank)

Set Z80 memory bank.

Parameters:
bankBank number to set (0x000-0x1FF)
void Z80_upload ( const u16  dest,
const u8 data,
const u16  size,
const bool  resetz80 
)

Upload data in Z80 memory.

Parameters:
destDestination address (Z80 memory).
dataData to upload.
sizeSize in byte of data to upload.
resetz80Reset Z80 if set to TRUE.
void Z80_write ( const u16  addr,
const u8  value 
)

Write to Z80 memory (Z80_RAM).

Parameters:
addrAddress to write (relative to start of Z80_RAM).
valueValue to write.

You need to request Z80 BUS to access Z80 memory.

See also:
Z80_requestBus(u16)
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines