Previous 15994 Revisions Next

r9974 Sunday 9th January, 2011 at 18:04:59 UTC by Phill Harvey-Smith
rmnimbus, more graphics improvements, rotating nimbus demo from the
welcome disk now works correctly.

atarist, commented two unused variables that where preventing compile.
[src/mess/drivers]atarist.c
[src/mess/machine]rmnimbus.c
[src/mess/video]rmnimbus.c

src/mess/machine/rmnimbus.c
r9973r9974
104104
105105#define DEBUG_SET(flags)    ((state->debug_machine & (flags))==(flags))
106106
107#define DEBUG_NONE         0x0000000
107108#define DMA_BREAK           0x0000001
108109#define DECODE_BIOS         0x0000002
109#define DECODE_DOS21      0x0000004
110#define DECODE_BIOS_RAW     0x0000004
111#define DECODE_DOS21      0x0000008
110112
113
111114/* Z80 SIO */
112115
113116const z80sio_interface nimbus_sio_intf =
r9973r9974
157160static void nimbus_debug(running_machine *machine, int ref, int params, const char *param[]);
158161
159162static int instruction_hook(device_t &device, offs_t curpc);
160static void decode_subbios(device_t *device,offs_t pc);
163static void decode_subbios(device_t *device,offs_t pc, UINT8 raw_flag);
161164static void decode_dos21(device_t *device,offs_t pc);
162static void decode_dssi_f_fill_area(device_t *device,UINT16  ds, UINT16 si);
163static void decode_dssi_f_plot_character_string(device_t *device,UINT16  ds, UINT16 si);
164static void decode_dssi_f_set_new_clt(device_t *device,UINT16  ds, UINT16 si);
165static void decode_dssi_f_plonk_char(device_t *device,UINT16  ds, UINT16 si);
166static void decode_dssi_f_rw_sectors(device_t *device,UINT16  ds, UINT16 si);
165static void decode_dssi_generic(device_t *device,UINT16  ds, UINT16 si, UINT8 raw_flag);
166static void decode_dssi_f_fill_area(device_t *device,UINT16  ds, UINT16 si, UINT8 raw_flag);
167static void decode_dssi_f_plot_character_string(device_t *device,UINT16  ds, UINT16 si, UINT8 raw_flag);
168static void decode_dssi_f_set_new_clt(device_t *device,UINT16  ds, UINT16 si, UINT8 raw_flag);
169static void decode_dssi_f_plonk_char(device_t *device,UINT16  ds, UINT16 si, UINT8 raw_flag);
170static void decode_dssi_f_rw_sectors(device_t *device,UINT16  ds, UINT16 si, UINT8 raw_flag);
167171
168172static void nimbus_bank_memory(running_machine *machine);
169173static void memory_reset(running_machine *machine);
r9973r9974
12871291      machine->device(MAINCPU_TAG)->debug()->set_instruction_hook(instruction_hook);
12881292   }
12891293
1290   state->debug_machine=DECODE_BIOS;
1294   state->debug_machine=DEBUG_NONE;
12911295}
12921296
12931297static void execute_debug_irq(running_machine *machine, int ref, int params, const char *param[])
r9973r9974
13461350
13471351static int instruction_hook(device_t &device, offs_t curpc)
13481352{
1349   rmnimbus_state *state = device.machine->driver_data<rmnimbus_state>();
1350    address_space *space = cpu_get_address_space(&device, ADDRESS_SPACE_PROGRAM);
1351    UINT8               *addr_ptr;
1353   rmnimbus_state    *state = device.machine->driver_data<rmnimbus_state>();
1354    address_space    *space = cpu_get_address_space(&device, ADDRESS_SPACE_PROGRAM);
1355    UINT8           *addr_ptr;
13521356
13531357    addr_ptr = (UINT8*)space->get_read_ptr(curpc);
13541358
13551359   if ((addr_ptr !=NULL) && (addr_ptr[0]==0xCD))
13561360   {
13571361      if(DEBUG_SET(DECODE_BIOS) && (addr_ptr[1]==0xF0))
1358         decode_subbios(&device,curpc);
1359
1362      {
1363         if(DEBUG_SET(DECODE_BIOS_RAW))
1364            decode_subbios(&device,curpc,1);
1365         else
1366            decode_subbios(&device,curpc,0);         
1367      }
1368     
13601369      if(DEBUG_SET(DECODE_DOS21) && (addr_ptr[1]==0x21))
13611370            decode_dos21(&device,curpc);
13621371   }
r9973r9974
13681377#define set_drv(drv_name)       sprintf(drv_str,drv_name)
13691378#define set_func(func_name)     sprintf(func_str,func_name)
13701379
1371static void decode_subbios(device_t *device,offs_t pc)
1380static void decode_subbios(device_t *device,offs_t pc, UINT8 raw_flag)
13721381{
13731382    char    type_str[80];
13741383    char    drv_str[80];
13751384    char    func_str[80];
13761385
1377    void (*dump_dssi)(device_t *,UINT16, UINT16) = NULL;
1386    void (*dump_dssi)(device_t *,UINT16, UINT16 ,UINT8) = NULL;
13781387
13791388    device_t *cpu = device->machine->device(MAINCPU_TAG);
13801389
r9973r9974
13841393    UINT16  ds = cpu_get_reg(cpu,I8086_DS);
13851394    UINT16  si = cpu_get_reg(cpu,I8086_SI);
13861395
1387    logerror("=======================================================================\n");
1388    logerror("Sub-bios call at %08X, AX=%04X, BX=%04X, CX=%04X, DS:SI=%04X:%04X\n",pc,ax,bx,cx,ds,si);
1396   // *** TEMP Don't show f_enquire_display_line calls !
1397   if((cx==6) && (ax==43))
1398      return;
1399   // *** END TEMP
13891400
1401   if(!raw_flag)
1402   {
1403      logerror("=======================================================================\n");
1404      logerror("Sub-bios call at %08X, AX=%04X, BX=%04X, CX=%04X, DS:SI=%04X:%04X\n",pc,ax,bx,cx,ds,si);
1405   }
1406   
13901407    set_type("invalid");
13911408    set_drv("invalid");
13921409    set_func("invalid");
13931410
1394
13951411    switch (cx)
13961412    {
13971413        case 0   :
r9973r9974
16181634                        case 2  : set_func("f_plonk_cursor"); break;
16191635                        case 3  : set_func("f_kill_cursor"); break;
16201636                        case 4  : set_func("f_scroll"); break;
1621                        case 5  : set_func("f_width"); break;
1637                        case 5  : set_func("f_width"); dump_dssi=decode_dssi_generic;break;
16221638                        case 6  : set_func("f_get_char_set"); break;
16231639                        case 7  : set_func("f_set_char_set"); break;
16241640                        case 8  : set_func("f_reset_char_set"); break;
r9973r9974
16871703        }; break;
16881704    }
16891705
1690    logerror("Type=%s, Driver=%s, Function=%s\n",type_str,drv_str,func_str);
1706   if(raw_flag)
1707   {
1708      if(dump_dssi!=NULL)
1709         dump_dssi(device,ds,si,raw_flag);
1710   }
1711   else
1712   {
1713      logerror("Type=%s, Driver=%s, Function=%s\n",type_str,drv_str,func_str);
16911714
1692    if(dump_dssi!=NULL)
1693        dump_dssi(device,ds,si);
1694    logerror("=======================================================================\n");
1715      if(dump_dssi!=NULL)
1716         dump_dssi(device,ds,si,raw_flag);
1717      logerror("=======================================================================\n");
1718   }
16951719}
16961720
16971721static void *get_dssi_ptr(address_space *space, UINT16   ds, UINT16 si)
r9973r9974
16991723    int             addr;
17001724
17011725    addr=((ds<<4)+si);
1702    OUTPUT_SEGOFS("DS:SI",ds,si);
1726//    OUTPUT_SEGOFS("DS:SI",ds,si);
17031727
17041728    return space->get_read_ptr(addr);
17051729}
17061730
1707static void decode_dssi_f_fill_area(device_t *device,UINT16  ds, UINT16 si)
1731static void decode_dssi_generic(device_t *device,UINT16  ds, UINT16 si, UINT8 raw_flag)
17081732{
1733   address_space *space = cputag_get_address_space(device->machine,MAINCPU_TAG, ADDRESS_SPACE_PROGRAM);
1734    UINT16  *params;
1735   int      count;
1736
1737    if(raw_flag)
1738      return;
1739   
1740    params=(UINT16  *)get_dssi_ptr(space,ds,si);
1741
1742   for(count=0; count<10; count++)
1743      logerror("%04X ",params[count]);
1744
1745   logerror("\n");
1746}
1747
1748
1749static void decode_dssi_f_fill_area(device_t *device,UINT16  ds, UINT16 si, UINT8 raw_flag)
1750{
17091751    address_space *space = cputag_get_address_space(device->machine,MAINCPU_TAG, ADDRESS_SPACE_PROGRAM);
17101752
17111753    UINT16          *addr_ptr;
r9973r9974
17151757
17161758    area_params = (t_area_params   *)get_dssi_ptr(space,ds,si);
17171759
1718    OUTPUT_SEGOFS("SegBrush:OfsBrush",area_params->seg_brush,area_params->ofs_brush);
1719    brush=(t_nimbus_brush  *)space->get_read_ptr(LINEAR_ADDR(area_params->seg_brush,area_params->ofs_brush));
1760    if (!raw_flag)
1761      OUTPUT_SEGOFS("SegBrush:OfsBrush",area_params->seg_brush,area_params->ofs_brush);
1762   
1763   brush=(t_nimbus_brush  *)space->get_read_ptr(LINEAR_ADDR(area_params->seg_brush,area_params->ofs_brush));
17201764
1721    logerror("Brush params\n");
1722    logerror("Style=%04X,          StyleIndex=%04X\n",brush->style,brush->style_index);
1723    logerror("Colour1=%04X,        Colour2=%04X\n",brush->colour1,brush->colour2);
1724    logerror("transparency=%04X,   boundry_spec=%04X\n",brush->transparency,brush->boundary_spec);
1725    logerror("boundry colour=%04X, save colour=%04X\n",brush->boundary_colour,brush->save_colour);
1765    if(raw_flag)
1766   {
1767      logerror("\tdw\t%04X, %04X, %04X, %04X, %04X, %04X, %04X, %04X, %04X, ",
1768             brush->style,brush->style_index,brush->colour1,brush->colour2,
1769             brush->transparency,brush->boundary_spec,brush->boundary_colour,brush->save_colour,
1770             area_params->count);
1771   }   
1772   else
1773   {
1774      logerror("Brush params\n");
1775      logerror("Style=%04X,          StyleIndex=%04X\n",brush->style,brush->style_index);
1776      logerror("Colour1=%04X,        Colour2=%04X\n",brush->colour1,brush->colour2);
1777      logerror("transparency=%04X,   boundry_spec=%04X\n",brush->transparency,brush->boundary_spec);
1778      logerror("boundry colour=%04X, save colour=%04X\n",brush->boundary_colour,brush->save_colour);
17261779
17271780
1728    OUTPUT_SEGOFS("SegData:OfsData",area_params->seg_data,area_params->ofs_data);
1729
1781      OUTPUT_SEGOFS("SegData:OfsData",area_params->seg_data,area_params->ofs_data);
1782   }
1783   
17301784    addr_ptr = (UINT16 *)space->get_read_ptr(LINEAR_ADDR(area_params->seg_data,area_params->ofs_data));
17311785    for(cocount=0; cocount < area_params->count; cocount++)
17321786    {
1733        logerror("x=%d y=%d\n",addr_ptr[cocount*2],addr_ptr[(cocount*2)+1]);
1787      if(raw_flag)
1788      {
1789         if(cocount!=(area_params->count-1))
1790            logerror("%04X, %04X, ",addr_ptr[cocount*2],addr_ptr[(cocount*2)+1]);
1791         else
1792            logerror("%04X, %04X ",addr_ptr[cocount*2],addr_ptr[(cocount*2)+1]);     
1793      }
1794      else
1795         logerror("x=%d y=%d\n",addr_ptr[cocount*2],addr_ptr[(cocount*2)+1]);
17341796    }
1797   
1798   if(raw_flag)
1799      logerror("\n");
17351800}
17361801
1737static void decode_dssi_f_plot_character_string(device_t *device,UINT16  ds, UINT16 si)
1802static void decode_dssi_f_plot_character_string(device_t *device,UINT16  ds, UINT16 si, UINT8 raw_flag)
17381803{
17391804    address_space *space = cputag_get_address_space(device->machine,MAINCPU_TAG, ADDRESS_SPACE_PROGRAM);
17401805
1741    UINT8          *char_ptr;
1742    t_plot_string_params   *plot_string_params;
1743    int             charno;
1806    UINT8                   *char_ptr;
1807    t_plot_string_params      *plot_string_params;
1808    int                   charno;
17441809
1810    if(raw_flag)
1811      return;
1812
17451813    plot_string_params=(t_plot_string_params   *)get_dssi_ptr(space,ds,si);
17461814
17471815    OUTPUT_SEGOFS("SegFont:OfsFont",plot_string_params->seg_font,plot_string_params->ofs_font);
r9973r9974
17601828    logerror("\n");
17611829}
17621830
1763static void decode_dssi_f_set_new_clt(device_t *device,UINT16  ds, UINT16 si)
1831static void decode_dssi_f_set_new_clt(device_t *device,UINT16  ds, UINT16 si, UINT8 raw_flag)
17641832{
17651833    address_space *space = cputag_get_address_space(device->machine,MAINCPU_TAG, ADDRESS_SPACE_PROGRAM);
17661834    UINT16  *new_colours;
17671835    int     colour;
17681836    new_colours=(UINT16  *)get_dssi_ptr(space,ds,si);
17691837
1838    if(raw_flag)
1839      return;
1840
17701841    OUTPUT_SEGOFS("SegColours:OfsColours",ds,si);
17711842
17721843    for(colour=0;colour<16;colour++)
r9973r9974
17741845
17751846}
17761847
1777static void decode_dssi_f_plonk_char(device_t *device,UINT16  ds, UINT16 si)
1848static void decode_dssi_f_plonk_char(device_t *device,UINT16  ds, UINT16 si, UINT8 raw_flag)
17781849{
17791850    address_space *space = cputag_get_address_space(device->machine,MAINCPU_TAG, ADDRESS_SPACE_PROGRAM);
17801851    UINT16  *params;
17811852    params=(UINT16  *)get_dssi_ptr(space,ds,si);
17821853
1854    if(raw_flag)
1855      return;
1856
17831857    OUTPUT_SEGOFS("SegParams:OfsParams",ds,si);
17841858
17851859    logerror("plonked_char=%c\n",params[0]);
17861860}
17871861
1788static void decode_dssi_f_rw_sectors(device_t *device,UINT16  ds, UINT16 si)
1862static void decode_dssi_f_rw_sectors(device_t *device,UINT16  ds, UINT16 si, UINT8 raw_flag)
17891863{
17901864    address_space *space = cputag_get_address_space(device->machine,MAINCPU_TAG, ADDRESS_SPACE_PROGRAM);
17911865    UINT16  *params;
17921866    int     param_no;
17931867
1868    if(raw_flag)
1869      return;
1870
17941871    params=(UINT16  *)get_dssi_ptr(space,ds,si);
17951872
17961873    for(param_no=0;param_no<16;param_no++)
src/mess/video/rmnimbus.c
r9973r9974
9292static void write_reg_010(rmnimbus_state *state);
9393static void write_reg_012(rmnimbus_state *state);
9494static void write_reg_014(rmnimbus_state *state);
95static void write_reg_016(rmnimbus_state *state);
9596static void write_reg_01A(rmnimbus_state *state);
9697static void write_reg_01C(rmnimbus_state *state);
98static void write_reg_01E(rmnimbus_state *state);
9799static void write_reg_026(rmnimbus_state *state);
98100static void change_palette(running_machine *machine, UINT8 bank, UINT16 colours, UINT8 regno);
99101
r9973r9974
294296        case    reg010  : state->vidregs[reg010]=data; write_reg_010(state); break;
295297        case    reg012  : state->vidregs[reg012]=data; write_reg_012(state); break;
296298        case    reg014  : state->vidregs[reg014]=data; write_reg_014(state); break;
297        case    reg016  : state->vidregs[reg016]=data; break;
299        case    reg016  : state->vidregs[reg016]=data; write_reg_016(state); break;
298300        case    reg018  : state->vidregs[reg018]=data; break;
299301        case    reg01A  : state->vidregs[reg01A]=data; write_reg_01A(state); break;
300302        case    reg01C  : state->vidregs[reg01C]=data; write_reg_01C(state);break;
301        case    reg01E  : state->vidregs[reg01E]=data; break;
303        case    reg01E  : state->vidregs[reg01E]=data; write_reg_01E(state);break;
302304
303305        case    reg020  : state->vidregs[reg020]=data; break;
304306        case    reg022  : state->vidregs[reg022]=data; break;
r9973r9974
521523    write_pixel_data(state, state->vidregs[reg002],state->vidregs[reg00C]++,state->vidregs[reg014]);
522524}
523525
526static void write_reg_016(rmnimbus_state *state)
527{
528   state->vidregs[reg002]=state->vidregs[reg016];
529   
530    write_pixel_data(state, state->vidregs[reg002],state->vidregs[reg00C]++,FG_COLOUR);
531}
532
533
524534static void write_reg_01A(rmnimbus_state *state)
525535{
526536    write_pixel_data(state, ++state->vidregs[reg002],state->vidregs[reg00C],state->vidregs[reg01A]);
r9973r9974
536546    write_pixel_data(state, state->vidregs[reg002],state->vidregs[reg01C],FG_COLOUR);
537547}
538548
549static void write_reg_01E(rmnimbus_state *state)
550{
551   state->vidregs[reg00C]=state->vidregs[reg01E];
552
553    write_pixel_data(state, ++state->vidregs[reg002],state->vidregs[reg00C],FG_COLOUR);
554}
555
539556/*
540557    bits 0..3 of reg026 contain the border colour.
541558    bit 5 contains the 40/80 column (320/640 pixel) flag.
src/mess/drivers/atarist.c
r9973r9974
20612061void st_state::configure_memory()
20622062{
20632063   address_space *program = cpu_get_address_space(m_maincpu, ADDRESS_SPACE_PROGRAM);
2064   UINT8 *ram = ram_get_ptr(m_ram);
2064//   UINT8 *ram = ram_get_ptr(m_ram);
20652065
20662066   switch (ram_get_size(m_ram))
20672067   {
r9973r9974
22002200{
22012201   /* configure RAM banking */
22022202   address_space *program = cpu_get_address_space(m_maincpu, ADDRESS_SPACE_PROGRAM);
2203   UINT8 *ram = ram_get_ptr(m_ram);
2203//   UINT8 *ram = ram_get_ptr(m_ram);
22042204
22052205   switch (ram_get_size(m_ram))
22062206   {

Previous 15994 Revisions Next


© 1998-2018 The MESS Team