Jump to content
IGNORED

Setting MESS using QMC2


jacquesg

Recommended Posts

I wish I could be more of a help here. It seems like I have SAMS working, but to be honest I'm not sure how to confirm what size it is. Of course 'SIZE' just gives the standard 11840 and 24488 bytes that a 32k expansion would give.

 

Check that your INI file is in the same folder as the mess binary. The only thing you should have to change are the paths (make sure those a full paths) from the scripts I sent you, but I would strongly suggest rewriting them from scratch using mine as a guide.

Link to comment
Share on other sites

Does anyone have a Windows 7 script to start MESS from DOS with all the option?

 

How the hell do you write the script to include option like get rid of the freaking 32K in the console, SAMS 1Meg and 32K cards will never work?

If you want to disable the internal 32K you must start MESS, go into the OSD menu, System configuration, and turn it off. When you quit MESS, it will save these settings in a file ti99_4a.ini in the "cfg" directory. The configuration settings were not intended to be set in the command line.

 

So far I can not get SAMS or Horizon or GRAM or EVPC to work as there is no save state in MESS after i set options and no file to look at the script as it never saves one?

You would think that after you configure MESS it would have a save configuration option?

I made a INI folder like MESS Docs suggest but MESS never puts anything in it ever?

Little misunderstanding (I had to look it up as well :-) ). The ini folder is for copies of the mess.ini file. You can have a per-system emulator ini file. If you set writeconfig to 1 in the mess.ini file, MESS will create a copy of mess.ini as ti99_4a.ini in the ini folder, depending on the setting inipath in mess.ini.

 

This feature is activated when you set writeconfig to 1 in mess.ini. However, I would strongly discourage from doing so, despite the recommendation in the MESS manual. If you use it, the emulator will save the last inserted cartridge and floppy disks. When you start the emulation next time you will automatically get the same cartridge and disks inserted even if you planned to use no cartridge at all. Think of the educational cartridges that immediate grab control when you start the TI. I think this feature is a nuisance, but obviously there are other systems where it makes more sense.

 

That is, readconfig=1, but writeconfig=0.

 

What you are actually looking for is the config directory. All changes to configuration, dip, and input settings are saved to a configuration file. These files are located in the directory defined by cfg_directory in mess.ini. Check whether this directory exists.

 

I love the concept of MESS but my gawd what a pain to set up and use. Any help please!!!

Robert can not help much as he uses Linux and his scripts are gobbly gook to me using Windows 7

I guess I need some start up scripts for Windows so I can configure MESS and first step is dump the 32K in Consolle so I can use SAMS and HORIZON RAMDISK.

Please help 3 weeks is insane!

Rich, my suggestion: Ask more and try less. I'll help you where possible.

 

I'd like to add aome "philosophical" stuff:

 

MESS is a tool that exposes many knobs, switches, and levers, all of which you can operate and try to achieve some outcome. However - and I also consider it as a shortcoming - there are roughly 10 times more ways to do it wrong than to do it right. If you don't really know how to achieve something and you start guessing, MESS will disappoint you by making you fail 90% of the time. If you know well how to do it, you may enjoy the small 10% for almost 100% of the time. This is what makes it difficult for me to anticipate the issues that many users encounter when working with MESS. I'm doing it in the intended way; installing takes me 3 minutes, configuration another 2, copying the required ROMs 5 more, so I'm possibly done 10 minutes when starting from scratch. But I benefit from my "hidden" knowledge that I'm even not aware of.

 

I'm not trying to mock people saying that MESS is simple to set up and use for me. This is obviously the case, but not because of some alien capabilities of mine; I'm just not hitting the problems that other people do.

 

The thing is that this observation does not only hold for MESS but for many other tools in the technological world, just compare operating systems or modern devices like TV sets or Bluray players. Most of them require you to do it perfectly, not just close to, and by that they keep frustrating people.

  • Like 1
Link to comment
Share on other sites

Throughout the Documents is says MAME, does it mean MESS or MAME only or both?

I am using Windows 7 MESS only is that the reason?

 

Do I have to go into the menu and set up MESS with everything every single time I start up MESS so I can use the SAMS and other devices?

Like turn off the 32K in Console that I will never use ever as I see no reason to use anything but the SAMS.

What advantage is the 32K in the Console when the SAMS has 1Meg?

 

As for Cartridge like Classic99 I never change the Cart unless I am going to play a game, but then I run another Classic99 on the other drive instead for that.

This also allows me to compare previous programs or files or performance at the same time. Something I would like to do with MESS also.

 

I have files in the cfg folder pointed to by the mess ini file but can not edit those files as they are not text based. It does save them as far as I can tell.

 

Someone weeks ago sent me a bunch of scripts that worked in Windows 7 and since I lost them when I have to reinstall Windows 7 has really set me back.

 

"philosophical" stuff: This is like when I build a special tool for installing or repairing vehicles equipment.

To build and use it is second nature for me, but to explain how to others never goes well.

(Usually I get WTF is that?)

If that is what you ment yea I know the feeling.

Edited by RXB
Link to comment
Share on other sites

Throughout the Documents is says MAME, does it mean MESS or MAME only or both?

I am using Windows 7 MESS only is that the reason?

 

MESS is the collection of components for computer system emulation inside MAME, so what you get in touch is actually the MAME core. All documentation for MAME should apply for MESS usage.

 

Do I have to go into the menu and set up MESS with everything every single time I start up MESS so I can use the SAMS and other devices?

As I said, no, all your settings should be saved automatically when you leave MESS. Next time they should still be there. If you need different configurations you will have to do more work; for example, swap between different ti99_4a.cfg files, or you need to pass the -cfg_directory option on the command line to override the setting in mess.ini.

 

Again, please check whether your mess.ini has a proper setting for cfg_directory. This is where the configuration file goes.

 

What advantage is the 32K in the Console when the SAMS has 1Meg?

I never had a SAMS, so I never had a need for 1 Meg of memory. And there came the Geneve.

In turn, the internal 32K is visibly faster; it connects to the 16 bit bus and does not trigger wait states.

 

As for Cartridge like Classic99 I never change the Cart unless I am going to play a game, but then I run another Classic99 on the other drive instead for that.

This also allows me to compare previous programs or files or performance at the same time. Something I would like to do with MESS also.

Personally, I find it more helpful to have full control what is plugged in on startup. With writeconfig=1, you would call

 

mess ti99_4a -cart invaders
and next time, two weeks later, you call

 

mess ti99_4a
and wonder why TI Invaders is plugged in. I think this is a silly feature (as long as it is so easy to tell it using -cart that you want that cartridge to be plugged in).

 

I have files in the cfg folder pointed to by the mess ini file but can not edit those files as they are not text based. It does save them as far as I can tell.

Really? That is strange. Try to move them out of the folder and restart MESS. Could they be zipped?

 

All files in my cfg folder are plain text files.

 

$ find cfg -type f -name "ti*" -exec file {} \;
cfg/ti990_4.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4ae.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4ev.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4e.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4p.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4qe.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti990_10.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_8e.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_224.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_232.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4a.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti990_4v.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4qi.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_8.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
Link to comment
Share on other sites

 

 

MESS is the collection of components for computer system emulation inside MAME, so what you get in touch is actually the MAME core. All documentation for MAME should apply for MESS usage.

 

Cool! Thanks that helps, except some commands seem to want mess in Windows 7, but maybe the problem is my configurations. Time will explain that one better.

 

As I said, no, all your settings should be saved automatically when you leave MESS. Next time they should still be there. If you need different configurations you will have to do more work; for example, swap between different ti99_4a.cfg files, or you need to pass the -cfg_directory option on the command line to override the setting in mess.ini.

 

Again, please check whether your mess.ini has a proper setting for cfg_directory. This is where the configuration file goes.

 

 

I never had a SAMS, so I never had a need for 1 Meg of memory. And there came the Geneve.

In turn, the internal 32K is visibly faster; it connects to the 16 bit bus and does not trigger wait states.

 

I liked the 16 bit bus of 32K but made some games impossible to play or screwed up the game timing. It did work great for applications like Funnelweb or Editor Assembler.

But the SAMS allows for incredible programs using the 1meg that would require multiple loading of files and make some project impossible without the SAMS.

 

Personally, I find it more helpful to have full control what is plugged in on startup. With writeconfig=1, you would call

 

mess ti99_4a -cart invaders
and next time, two weeks later, you call

 

mess ti99_4a

and wonder why TI Invaders is plugged in. I think this is a silly feature (as long as it is so easy to tell it using -cart that you want that cartridge to be plugged in).

 

Personally 99% of the time I use the only cart I need which is RXB. Built in Sector Editor, built in File Copy and Hard Drive commands. No need to load anything for that.

My Demos on youtube prove this over and over.

 

 

Really? That is strange. Try to move them out of the folder and restart MESS. Could they be zipped?

 

All files in my cfg folder are plain text files.

 

Turns out that if you right click the files is say to find a file utility but I selected Notepad and it opens the CFG files.

Trouble is when I save it then it saves that file but when I reload MESS ignores everything in that file?

$ find cfg -type f -name "ti*" -exec file {} \;
cfg/ti990_4.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4ae.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4ev.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4e.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4p.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4qe.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti990_10.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_8e.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_224.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_232.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4a.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti990_4v.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_4qi.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text
cfg/ti99_8.cfg: XML 1.0 document, UTF-8 Unicode (with BOM) text

My .ini file

#
# CORE CONFIGURATION OPTIONS
#
readconfig                1
writeconfig               1

#
# CORE SEARCH PATH OPTIONS
#
rompath                   roms
hashpath                  hash
samplepath                samples
artpath                   artwork
ctrlrpath                 ctrlr
inipath                   c:\mess
fontpath                  .
cheatpath                 cheat
crosshairpath             crosshair

#
# CORE OUTPUT DIRECTORY OPTIONS
#
cfg_directory             cfg
nvram_directory           nvram
memcard_directory         memcard
input_directory           inp
state_directory           sta
snapshot_directory        snap
diff_directory            diff
comment_directory         comments

#
# CORE STATE/PLAYBACK OPTIONS
#
state                     
autosave                  0
playback                  
record                    
mngwrite                  
aviwrite                  
wavwrite                  
snapname                  %g/%i
snapsize                  auto
snapview                  internal
statename                 %g
burnin                    0

#
# CORE PERFORMANCE OPTIONS
#
autoframeskip             0
frameskip                 0
seconds_to_run            0
throttle                  1
sleep                     1
speed                     1.0
refreshspeed              0

#
# CORE ROTATION OPTIONS
#
rotate                    1
ror                       0
rol                       0
autoror                   0
autorol                   0
flipx                     0
flipy                     0

#
# CORE ARTWORK OPTIONS
#
artwork_crop              0
use_backdrops             1
use_overlays              1
use_bezels                1
use_cpanels               1
use_marquees              1

#
# CORE SCREEN OPTIONS
#
brightness                1.0
contrast                  1.0
gamma                     1.0
pause_brightness          0.65
effect                    none

#
# CORE VECTOR OPTIONS
#
antialias                 1
beam                      1.0
flicker                   0

#
# CORE SOUND OPTIONS
#
sound                     1
samplerate                48000
samples                   1
volume                    0

#
# CORE INPUT OPTIONS
#
coin_lockout              1
ctrlr                     
mouse                     0
joystick                  1
lightgun                  0
multikeyboard             0
multimouse                0
steadykey                 0
ui_active                 0
offscreen_reload          0
joystick_map              auto
joystick_deadzone         0.3
joystick_saturation       0.85
natural                   0
joystick_contradictory    0
coin_impulse              0

#
# CORE INPUT AUTOMATIC ENABLE OPTIONS
#
paddle_device             keyboard
adstick_device            keyboard
pedal_device              keyboard
dial_device               keyboard
trackball_device          keyboard
lightgun_device           keyboard
positional_device         keyboard
mouse_device              mouse

#
# CORE DEBUGGING OPTIONS
#
log                       0
verbose                   0
update_in_pause           0
debug                     0
debugscript               
debug_internal            0

#
# CORE MISC OPTIONS
#
drc                       1
drc_use_c                 0
bios                      
cheat                     0
skip_gameinfo             0
uifont                    default
ramsize                   
confirm_quit              0
ui_mouse                  0
autoboot_command          
autoboot_delay            2
autoboot_script           
http                      0
http_port                 8080
http_path                 web

#
# WINDOWS DEBUGGING OPTIONS
#
oslog                     0
watchdog                  0
debugger_font             "Lucida Console"
debugger_font_size        9

#
# WINDOWS PERFORMANCE OPTIONS
#
priority                  0
multithreading            0
numprocessors             auto
profile                   0
bench                     0

#
# WINDOWS VIDEO OPTIONS
#
video                     d3d
numscreens                1
window                    0
maximize                  1
keepaspect                1
unevenstretch             1
prescale                  1
waitvsync                 0
syncrefresh               0
menu                      0

#
# DIRECTDRAW-SPECIFIC OPTIONS
#
hwstretch                 1

#
# DIRECT3D-SPECIFIC OPTIONS
#
filter                    1

#
# DIRECT3D POST-PROCESSING OPTIONS
#
hlsl_enable               0
hlslpath                  hlsl
hlsl_prescale_x           0
hlsl_prescale_y           0
hlsl_preset               -1
hlsl_write                
hlsl_snap_width           2048
hlsl_snap_height          1536
shadow_mask_alpha         0.0
shadow_mask_texture       aperture.png
shadow_mask_x_count       320
shadow_mask_y_count       240
shadow_mask_usize         0.09375
shadow_mask_vsize         0.109375
curvature                 0.03
pincushion                0.03
scanline_alpha            1.0
scanline_size             1.0
scanline_height           1.0
scanline_bright_scale     1.0
scanline_bright_offset    0.0
scanline_jitter           0.0
defocus                   0.0,0.0
converge_x                0.3,0.0,-0.3
converge_y                0.0,0.3,-0.3
radial_converge_x         0.0,0.0,0.0
radial_converge_y         0.0,0.0,0.0
red_ratio                 1.0,0.0,0.0
grn_ratio                 0.0,1.0,0.0
blu_ratio                 0.0,0.0,1.0
saturation                1.4
offset                    0.0,0.0,0.0
scale                     0.95,0.95,0.95
power                     0.8,0.8,0.8
floor                     0.05,0.05,0.05
phosphor_life             0.4,0.4,0.4

#
# NTSC POST-PROCESSING OPTIONS
#
yiq_enable                0
yiq_cc                    3.59754545
yiq_a                     0.5
yiq_b                     0.5
yiq_o                     1.570796325
yiq_p                     1.0
yiq_n                     1.0
yiq_y                     6.0
yiq_i                     1.2
yiq_q                     0.6
yiq_scan_time             52.6
yiq_phase_count           2

#
# VECTOR POST-PROCESSING OPTIONS
#
vector_length_scale       0.8
vector_length_ratio       500.0

#
# BLOOM POST-PROCESSING OPTIONS
#
vector_bloom_scale        0.3
raster_bloom_scale        0.225
bloom_lvl0_weight         1.0
bloom_lvl1_weight         0.21
bloom_lvl2_weight         0.19
bloom_lvl3_weight         0.17
bloom_lvl4_weight         0.15
bloom_lvl5_weight         0.14
bloom_lvl6_weight         0.13
bloom_lvl7_weight         0.12
bloom_lvl8_weight         0.11
bloom_lvl9_weight         0.10
bloom_lvl10_weight        0.09

#
# PER-WINDOW VIDEO OPTIONS
#
screen                    auto
aspect                    auto
resolution                auto
view                      auto
screen0                   auto
aspect0                   auto
resolution0               auto
view0                     auto
screen1                   auto
aspect1                   auto
resolution1               auto
view1                     auto
screen2                   auto
aspect2                   auto
resolution2               auto
view2                     auto
screen3                   auto
aspect3                   auto
resolution3               auto
view3                     auto

#
# FULL SCREEN OPTIONS
#
triplebuffer              0
switchres                 0
full_screen_brightness    1.0
full_screen_contrast      1.0
full_screen_gamma         1.0

#
# WINDOWS SOUND OPTIONS
#
audio_latency             2

#
# INPUT DEVICE OPTIONS
#
dual_lightgun             0

My CFG fie for ti99_4a file:

<?xml version="1.0"?>
<!-- This file is autogenerated; comments and unknown tags will be stripped -->
<mameconfig version="10">
    <system name="ti99_4a">
        <image_directories>
            <device instance="cartridge" directory="C:\mess\carts\" />
            <device instance="floppydisk1" directory="C:\mess\disks\rxb_2012" />
            <device instance="floppydisk2" directory="C:\mess" />
            <device instance="floppydisk3" directory="C:\mess" />
            <device instance="floppydisk4" directory="C:\mess" />
            <device instance="harddisk1" directory="C:\mess\disks\" />
            <device instance="harddisk2" directory="C:\mess\disks\" />
            <device instance="harddisk3" directory="C:\mess\disks\" />
            <device instance="cassette1" directory="C:\mess" />
            <device instance="cassette2" directory="C:\mess" />
        </image_directories>
    </system>
</mameconfig>

It ignores the RXB cart in the CFG files like they are not there but if I delete them it replaces them, got me on what is going on.

Link to comment
Share on other sites

Ah, just found your answers within my quote ... :) ... well, the forum software is not really the yellow of the egg, as we say in German. If you want to break the code like I did, you must switch to the "BBCode mode" (leftmost switch in the editor) and add

... your reply ...
into my text.

 

OK then, to your configuration. In the cfg file no cartridges or disks are saved, only the directories. If you want to preserve your disks and cart settings, this goes into your ti99_4a.ini file, which should be in the inipath, here: c:\mess. As you report, it seems as if MESS does not find that ini file.

 

By the way, where is this mess.ini file located that you show here? Also in c:\mess? I can imagine if you doubleclick mess.exe from the desktop, the current directory is not that folder unless you specify it in the file properties. Accordingly, mess.exe won't find its home directory with the mess.ini. In case you don't do it that way already, open a command line, cd to mess, and then run mess. See whether it now remembers your settings. If you are using a batch file to start, add "C:" and "cd \mess" to the top of the file.

 

In fact, applications in Windows normally use the registry instead of config files, so they always find their settings regardless from where they are started. In Unix systems there is no registry (and I'm pretty glad about that!), so we use config files, and so does MAME/MESS as a cross-platform application.

  • Like 2
Link to comment
Share on other sites

The only ini file that MESS seems to ever talk to is the ini file in C:\mess and ignores all those in the INI folder. (Never creates one in that ini folder.)

MESS never changes the INI file in C:\mess or in the INI folder ever?

So MESS never ever saves anything in any ini file even if only one MESS ini file exists.

 

Matter of fact I can delete all files from the INI folder and it puts nothing there and MESS starts fine.

Now if I remove the ini file from C:\mess it crashes MESS and will not run. So MESS on my computer only sees that one ini file ever.

 

By the way I am using mess64.exe as I have a 64 bit Quad Core Xeon CPU 3Ghz with Windows 7 64 bit.

 

Where in the ini file is Carts and Disks? I do not see a header for these in the ini file?

Do I just add these to the ini file? Is that the problem?

 

I run Classic99 and would really like to run MESS from the same Windows 7 as I can not log onto Mac OS X and Windows 7 at same time on same computer.

Mac OS X is on a different Hard Drive then the Windows 7 Hard Drive on this computer as every OS has a separate Hard Drive including Windows 8

Edited by RXB
Link to comment
Share on other sites

I can confirm that CALL SECTOR("WDS1.",1,1,"0") leads to a File Error, but I do not know why this error occurs. There seems to be an access to the HD, but always to sector CHS=(0,0,0), regardless of the value in quotes. So either there is a problem with the parameter setup for the sector read subprogram, maybe due to an incompatibility between SCSI and HFDC, or actually an issue in MESS. As the hard disk is properly working (which somehow entails sector access), this may be not so easy to find out. I'll have to write a simple test program first, I suppose.

Link to comment
Share on other sites

Do you have a copy of RXB 2001?

RXB 2012 uses the same routines as 2001 so if both RXB 2012 and RXB 2001 crash SECTOR then the problem is HFDC.

 

Now some people with HFDC told me it works fine as Dr. Charles Good said he tested it with 2001 and at a Fair it did not crash.

 

Let me look to see if I made any changes.

 

Ok editing this post:

 

EXACTLY THE SAME

FCOPY and SECTOR have not been modified in any way since RXB 2001?

Edited by RXB
Link to comment
Share on other sites

Do you have a copy of RXB 2001?

RXB 2012 uses the same routines as 2001 so if both RXB 2012 and RXB 2001 crash SECTOR then the problem is HFDC.

 

Now some people with HFDC told me it works fine as Dr. Charles Good said he tested it with 2001 and at a Fair it did not crash.

 

Let me look to see if I made any changes.

 

Ok editing this post:

 

EXACTLY THE SAME

FCOPY and SECTOR have not been modified in any way since RXB 2001?

 

GOOD NEWS RXB SECTOR works on the HFDC Floppies fine. Just duplicated DSK4 to DSK1 using RXB CALL SECTOR, worked great!!!!

 

But still crashed on Hard drives.

Edited by RXB
Link to comment
Share on other sites

Have you tried any other sector editing utilities? I can't remember the names now, but didn't DSKU (John Birdwell) have a sector editor? Could it be that, due to the size of the hard disk, that a particular value (sector/cluster/whatever (this really isn't my bag!)) has overflowed (i.e. doesn't fit in 16 bits).

 

InsaneMultitasker is the dude for that kind of thang!

Link to comment
Share on other sites

 

GOOD NEWS RXB SECTOR works on the HFDC Floppies fine. Just duplicated DSK4 to DSK1 using RXB CALL SECTOR, worked great!!!!

 

But still crashed on Hard drives.

 

 

Can you share the code extracts? Generally speaking, the HFDC DSR is the most 'stable' of the three hard drive card DSRs (HFDC, SCSI, IDE). There are some differences I've encountered between HFDC and SCSI DSRs, though I can't say I recall any troubles with low level sector IO.

 

It would also be very helpful for someone to test this routine on the real hardware. ;)

Link to comment
Share on other sites

Oh my, took me some time to write this test program. I think I found all possible pitfalls* ...

 

But it is working, at least in MESS. This program reads a sector specified in SECTOR from the first hard disk and displays the contents on the screen.

 

 

       DEF  START
       REF  DSRLNK,VMBR,VMBW
 
WS     BSS  32
BUF    BSS  256
 
SECTOR DATA 0
 
PAB    BYTE 1
       BYTE >20
 
START  LIMI 0
       LWPI WS
       LI   R0,>1000
       LI   R1,PAB
       LI   R2,2
       BLWP @VMBW
       MOV  R0,@>8356
 
       LI   R0,>0101
       MOV  R0,@>834C
       LI   R0,>1800
       MOV  R0,@>834E
       MOV  @SECTOR,@>8350
       CLR  @>8352
 
       BLWP @DSRLNK
       DATA 10
 
       LI   R0,>1800
       LI   R1,BUF
       LI   R2,256
       BLWP @VMBR
 
       CLR  R0
       BLWP @VMBW
 
       LIMI 2
       JMP  $
 
       END
*Pitfalls: You can do the following to make life harder:

 

Forget to write a PAB at all

Forget to put the pointer in 8356

Put the wrong pointer in 8356

Try to address the first drive as number 0 (manual says they start at 1)

Edited by mizapf
Link to comment
Share on other sites

I'm thinking that it's perhaps something in the DSR of the hard disk card, rather than MESS itself. What type of call into the DSR is your CALL SECTOR doing? (What parameters, where, what function code etc?)

The SCSI and HFDC use the same exact opcodes so why would there be a problem?

 

The SCSI only has 2 opcodes that are special to the SCSI CUTDIR that deletes a master directory and all directories inside it including all files.

And SCSI only has SCSI that identifies the Hard Drives that are connected to the SCSI controller by returning a string value from that drive.

 

Here is the GPL code for every DISK ACCESS UTILITY in RXB:


<0328> D450 00,14,09 UPAB   BYTE 0,>14,>09,>00,80,0,0,0,0,0
       D453 00,50,00
       D456 00,00,00
       D459 00
<0329> D45A D4,87    USER   DATA BASIC
<0330> D45C 04,55,53        STRI 'USER'            CALL USER(path-string)
       D45F 45,52
<0331> D461 D4,63           DATA $+2
<0332> D463 06,D1,00        CALL GLPARZ
<0333> D466 06,D1,0C        CALL STRGET
<0334> D469 BE,A8,C0        ST   >20,V@>08C0
       D46C 20
<0335> D46D 35,00,50        MOVE 80,V@>08C0,V@>08C1
       D470 A8,C1,A8
       D473 C0
<0336> D474 31,00,0A        MOVE 10,G@UPAB,V@>08C0
       D477 A8,C0,D4
       D47A 50
<0337> D47B BC,A8,C9        ST   @FAC7,V@>08C9
       D47E 51
<0338> D47F 34,50,A8        MOVE @FAC6,V*FAC4,V@>08CA
       D482 CA,B0,4E

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0054 
EQUATES ALCS-359
<0339> D485 43,16           BR   PEEK5
<0340>               **************************
<0341> D487 D4,97    BASIC  DATA BSAVE
<0342> D489 05,42,41        STRI 'BASIC'           CALL BASIC
       D48C 53,49,43
<0343> D48F D4,91           DATA $+2
<0344> D491 06,80,12        CALL CLSALL
<0345> 216F          GBASIC EQU  >216F
<0346> D494 05,21,6F        B    GBASIC
<0347>               **************************
<0348> D497 D4,B7    BSAVE  DATA BLOAD
<0349> D499 05,42,53        STRI 'BSAVE'           CALL BSAVE(pathstring)
       D49C 41,56,45
<0350> D49F D4,A1           DATA $+2
<0351> D4A1 06,D4,E9        CALL MYSAL             * Get pathname
<0352> D4A4 BE,AF,10        ST   >06,V@>1000       * LOAD opcode
       D4A7 00,06
<0353> D4A9 35,20,00        MOVE 8192,@>2000,V@>1020
       D4AC AF,10,20
       D4AF 8F,9D,00
<0354> D4B2 06,D4,D7        CALL MYDOIT            * DSRLNK opcode
<0355> D4B5 43,16           BR   PEEK5             * Done
<0356>               **************************
<0357> D4B7 D5,A6    BLOAD  DATA RENAME
<0358> D4B9 05,42,4C        STRI 'BLOAD'           CALL BLOAD(pathstring)
       D4BC 4F,41,44
<0359> D4BF D4,C1           DATA $+2
<0360> D4C1 06,D4,E9        CALL MYSAL             * Get pathname
<0361> D4C4 BE,AF,10        ST   >05,V@>1000       * LOAD opcode
       D4C7 00,05
<0362> D4C9 06,D4,D7        CALL MYDOIT            * DSRLNK opcode
<0363> D4CC 35,20,00        MOVE 8192,V@>1020,@>2000
       D4CF 8F,9D,00
       D4D2 AF,10,20
<0364> D4D5 43,16           BR   PEEK5             * Done
<0365> D4D7 BF,56,10 MYDOIT DST  >1009,@FAC12      * Get buffer address in VDP
       D4DA 09
<0366> D4DB 06,00,10        CALL LINK              * DSRLNK
<0367> D4DE 08              BYTE >08
<0368> D4DF 65,B5           BS   ERRFE             * File Error
<0369> D4E1 DA,AF,10        CLOG >E0,V@>1001       * Set error bits
       D4E4 01,E0
<0370> D4E6 45,B5           BR   ERRFE
<0371> D4E8 00              RTN
<0372> D4E9 0F,70    MYSAL  XML  COMPCT            * GARBAGE COLLECTION
<0373> D4EB BD,5E,1A        DST  @STREND,@ARG2     * String end
<0374> D4EE A5,5E,6E        DSUB @VSPTR,@ARG2      * Value Stack PoinTeR
<0375> D4F1 A7,5E,00        DSUB 63,@ARG2          * Size of Value Stack
       D4F4 3F
<0376> D4F5 CB,5E,20        DCHE >2021,@ARG2       * Size of buffer
       D4F8 21
<0377> D4F9 45,5A           BR   ERRSO             * Error Stack Overflow
<0378> D4FB 06,D1,00        CALL GLPARZ            * (
<0379> D4FE 06,D1,0C        CALL STRGET            * Pathstring
<0380> D501 86,AF,10        CLR  V@>1000           * 0 BYTE
       D504 00
<0381> D505 35,20,20        MOVE >2020,V@>1000,V@>1001 * Ripple
       D508 AF,10,01
       D50B AF,10,00
<0382> D50E BF,AF,10        DST  >1020,V@>1002     * Buffer address
       D511 02,10,20
<0383> D514 BF,AF,10        DST  >2000,V@>1006     * Number of bytes
       D517 06,20,00
<0384> D51A BC,AF,10        ST   @FAC7,V@>1009     * Length byte

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0055 
EQUATES ALCS-359
       D51D 09,51
<0385> D51F 34,50,AF        MOVE @FAC6,V*FAC4,V@>100A * Pathstring
       D522 10,0A,B0
       D525 4E
<0386> D526 00              RTN
<0387>               *******************************
<0388> D527 88,5A    DSKDSR FETCH @FAC16           * Get Length of name
<0389> D529 88,5B           FETCH @FAC17           * Get Subroutine #
<0390> D52B BD,A3,C0        DST   @FAC16,V@>03C0   * Load into PAB
       D52E 5A
<0391> D52F BF,56,03        DST   >03C0,@FAC12     * PAB address in VDP
       D532 C0
<0392> D533 06,00,10        CALL  LINK             * DSRLNK
<0393> D536 0A              BYTE  >0A              * Subroutine
<0394> D537 65,B5           BS    ERRFE            * File Error
<0395> D539 E6,50,05        SRL   5,@FAC6          *
<0396> D53C 8E,50           CZ    @FAC6            *
<0397> D53E 45,B5           BR    ERRFE            * File Error
<0398> D540 00              RTN                    *
<0399>               *******************************
<0400> D541 06,D1,62 DSKNAM CALL DEVNAM            * DSK# or SCS# or WDS#
<0401> D544 35,00,05        MOVE 5,V*FAC4,@ARG     * Get device name
       D547 5C,B0,4E
<0402> D54A BC,17,5F        ST   @ARG3,@DEVNUM     * Save device number characte
<0403> D54D D7,5C,44        DCEQ 'DS',@ARG
       D550 53
<0404> D551 55,5C           BR   DSKNA2
<0405> D553 D6,5E,4B        CEQ  'K',@ARG2
<0406> D556 45,9A           BR   ERRBA             * Error Bad Argument
<0407> D558 86,16           CLR  @DFLAG            * Set DSK flag
<0408> D55A 55,75           BR   DSKNA4
<0409> D55C D7,5C,53 DSKNA2 DCEQ 'SC',@ARG
       D55F 43
<0410> D560 75,68           BS   DSKNA3
<0411> D562 D7,5C,57        DCEQ 'WD',@ARG
       D565 44
<0412> D566 45,9A           BR   ERRBA             * Error Bad Argument
<0413> D568 D6,5E,53 DSKNA3 CEQ  'S',@ARG2
<0414> D56B 45,9A           BR   ERRBA             * Error Bad Argument
<0415> D56D BE,16,FF        ST   >FF,@DFLAG        * Set SCS or WDS flag
<0416> D570 BD,10,4E        DST  @FAC4,@VAR5       * Get string address
<0417> D573 93,10           DDEC @VAR5             * Point to PATH string length
<0418> D575 A6,17,30 DSKNA4 SUB  48,@DEVNUM        * DSK# or SCS# or WDS# -1
<0419> D578 00              RTN
<0420>               *******************************
<0421> D579 06,D1,0C GETFN  CALL STRGET            * Get string
<0422> D57C C6,51,0A        CH   10,@FAC7          * Length > 10?
<0423> D57F 65,3F           BS   ERRNTL            * Error Name Too Long
<0424> D581 8F,50           DCZ  @FAC6             * Length = 0?
<0425> D583 65,9A           BS   ERRBA             * Error Bad Argument
<0426> D585 BE,A3,C0        ST   >20,V@>03C0       * Clear PATH buffer
       D588 20
<0427> D589 35,00,1F        MOVE 31,V@>03C0,V@>03C1
       D58C A3,C1,A3
       D58F C0
<0428> D590 34,50,A3        MOVE @FAC6,V*FAC4,V@>03C2 * File name
       D593 C2,B0,4E
<0429> D596 00              RTN
<0430>               *******************************
<0431> D597 BC,4C,17 PATH   ST   @DEVNUM,@FAC2     * Device #
<0432> D59A BD,4E,10        DST  @VAR5,@FAC4       * Pathname address lenght/st[
<0433> D59D BF,A3,C0        DST  >0127,V@>03C0     * Opcode of PATHNAME subrouti
       D5A0 01,27
<0434> D5A2 06,D8,65        CALL RWDSR             * Read/Write DSR LINK

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0056 
EQUATES ALCS-359
<0435> D5A5 00              RTN
<0436>               *******************************
<0437> D5A6 D5,FC    RENAME DATA PROT
<0438> D5A8 06,52,45        STRI 'RENAME'          CALL RENAME(pathname,oldname,
       D5AB 4E,41,4D
       D5AE 45
<0439> D5AF D5,B1           DATA $+2
<0440> D5B1 06,D1,00        CALL GLPARZ            * (
<0441> D5B4 06,D5,41 RENAGN CALL DSKNAM            * Pathname
<0442> D5B7 D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0443> D5BA 45,33           BR   ERRSYN
<0444> D5BC 8E,16           CZ   @DFLAG            * DSK?
<0445> D5BE 75,C3           BS   RENNP             * Yes
<0446> D5C0 06,D5,97        CALL PATH              * Set PATH
<0447> D5C3 06,D5,79 RENNP  CALL GETFN             * Old name
<0448> D5C6 D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0449> D5C9 45,33           BR   ERRSYN
<0450> D5CB 06,D1,0C        CALL STRGET            * New name
<0451> D5CE C6,51,0A        CH   10,@FAC7          * Length > 10?
<0452> D5D1 65,3F           BS   ERRNTL            * Error Name Too Long
<0453> D5D3 34,50,A3        MOVE @FAC6,V*FAC4,V@>03D0
       D5D6 D0,B0,4E
<0454> D5D9 BC,4C,17        ST   @DEVNUM,@FAC2     * DSK#
<0455> D5DC BF,4E,03        DST  >03D0,@FAC4       * New name
       D5DF D0
<0456> D5E0 BF,50,03        DST  >03C2,@FAC6       * Old name
       D5E3 C2
<0457> D5E4 8E,16           CZ   @DFLAG            * DSK?
<0458> D5E6 75,F0           BS   RENDSK            * Yes
<0459> D5E8 06,D5,27        CALL DSKDSR            * DSKLNK
<0460> D5EB 01,23           DATA >0123             * Opcode RENAME HARD
<0461> D5ED 05,D5,F5        B    RENEND
<0462> D5F0 06,D5,27 RENDSK CALL DSKDSR            * DSKLNK
<0463> D5F3 01,13           DATA >0113             * Opcode RENAME DISK
<0464> D5F5 D6,42,B3 RENEND CEQ  COMMAZ,@CHAT      * ,
<0465> D5F8 75,B4           BS   RENAGN            * Redo again
<0466> D5FA 43,16           BR   PEEK5
<0467>               *******************************
<0468> D5FC D6,48    PROT   DATA SCSI
<0469> D5FE 07,50,52        STRI 'PROTECT'         CALL PROTECT(pathname,filenam
       D601 4F,54,45
       D604 43,54
<0470> D606 D6,08           DATA $+2
<0471> D608 06,D1,00        CALL GLPARZ            * (
<0472> D60B 06,D5,41 PROAGN CALL DSKNAM            * Get pathname
<0473> D60E D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0474> D611 45,33           BR   ERRSYN
<0475> D613 8E,16           CZ   @DFLAG            * DSK?
<0476> D615 76,1A           BS   PRONP             * Yes
<0477> D617 06,D5,97        CALL PATH              * Set PATH
<0478> D61A 06,D5,79 PRONP  CALL GETFN             * Get filename
<0479> D61D 06,D1,56        CALL SUBLP3            * Option number
<0480> D620 86,4D           CLR  @FAC3             * UNPROTECT
<0481> D622 8F,4A           DCZ  @FAC              * Unprotect?
<0482> D624 76,29           BS   UNPRO
<0483> D626 BE,4D,FF        ST   >FF,@FAC3         * PROTECT
<0484> D629 BC,4C,17 UNPRO  ST   @DEVNUM,@FAC2     * DSK#
<0485> D62C BF,4E,03        DST  >03C2,@FAC4       * Filename
       D62F C2
<0486> D630 8E,16           CZ   @DFLAG            * DSK?
<0487> D632 76,3C           BS   PRODSK            * Yes
<0488> D634 06,D5,27        CALL DSKDSR            * DSRLNK
<0489> D637 01,22           DATA >0122             * Opcode PROTECT HARD
<0490> D639 05,D6,41        B    PROEND

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0057 
EQUATES ALCS-359
<0491> D63C 06,D5,27 PRODSK CALL DSKDSR            * DSRLNK
<0492> D63F 01,12           DATA >0112             * Opcode PROTECT DISK
<0493> D641 D6,42,B3 PROEND CEQ  COMMAZ,@CHAT      * ,
<0494> D644 76,0B           BS   PROAGN            * Redo again
<0495> D646 43,16           BR   PEEK5
<0496>               *******************************
<0497> D648 D6,77    SCSI   DATA MKDIR
<0498> D64A 04,53,43        STRI 'SCSI'            CALL SCSI(pathname,string-var
       D64D 53,49
<0499> D64F D6,51           DATA $+2
<0500> D651 06,D1,00        CALL GLPARZ            * (
<0501> D654 06,D5,41 SCSAGN CALL DSKNAM            * Pathname
<0502> D657 D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0503> D65A 45,33           BR   ERRSYN
<0504> D65C BF,0C,00        DST  44,@BYTES         * Length of buffer
       D65F 2C
<0505> D660 0F,71           XML  GETSTR            * Get string space
<0506> D662 BC,4C,17        ST   @DEVNUM,@FAC2     * SCS#
<0507> D665 BD,4E,1C        DST  @SREF,@FAC4       * String address
<0508> D668 06,D5,27        CALL DSKDSR            * DSRLNK
<0509> D66B 01,1C           DATA >011C             * Opcode EXAMINE SCSI
<0510> D66D 06,D1,2F        CALL NGOOD             * Assign string to variable
<0511> D670 D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0512> D673 76,54           BS   SCSAGN            * Redo again
<0513> D675 43,16           BR   PEEK5
<0514>               *******************************
<0515> D677 D6,E0    MKDIR  DATA RMDIR
<0516> D679 05,4D,4B        STRI 'MKDIR'           CALL MKDIR(pathname,directory
       D67C 44,49,52
<0517> D67F D6,81           DATA $+2
<0518> D681 BF,0C,00        DST  255,@BYTES        * For sector 0 access
       D684 FF
<0519> D685 0F,71           XML  GETSTR            * Get string space
<0520> D687 BD,00,1C        DST  @SREF,@VAR0       * Buffer address
<0521> D68A 93,00           DDEC @VAR0             * Make it 256 byte buffer
<0522> D68C 06,D1,00        CALL GLPARZ            * (
<0523> D68F 06,D5,41 MKDIR2 CALL DSKNAM            * Pathname
<0524> D692 D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0525> D695 45,33           BR   ERRSYN
<0526> D697 8E,16           CZ   @DFLAG            * DSK?
<0527> D699 56,C7           BR   MKDIR3            * No, Hard
<0528> D69B C6,51,05        CH   5,@FAC7           * Length > 5?
<0529> D69E 65,3F           BS   ERRNTL            * Error Name Too Long
<0530> D6A0 06,D5,79        CALL GETFN             * Filename
<0531> D6A3 BE,4D,FF        ST   >FF,@FAC3         * Set to READ SECTOR
<0532> D6A6 56,AA           BR   VOL1ST
<0533> D6A8 86,4D    VOL2ND CLR  @FAC3             * Set to WRITE SECTOR
<0534> D6AA 87,4A    VOL1ST DCLR @FAC              * Returned SECTOR
<0535> D6AC BC,4C,17        ST   @DEVNUM,@FAC2     * DSK#
<0536> D6AF BD,4E,00        DST  @VAR0,@FAC4       * Buffer Address
<0537> D6B2 87,50           DCLR @FAC6             * Sector number 0 DSK
<0538> D6B4 06,D5,27        CALL DSKDSR            * DSRLNK
<0539> D6B7 01,10           DATA >0110             * Opcode SECTOR DISK
<0540> D6B9 35,00,0A        MOVE 10,V@>03C2,V*VAR0 * Copy VOLUME name over old n
       D6BC B0,00,A3
       D6BF C2
<0541> D6C0 8E,4D           CZ   @FAC3             * First pass?
<0542> D6C2 56,A8           BR   VOL2ND            * No, again
<0543> D6C4 05,D6,D9        B    MKDIR4
<0544> D6C7 06,D5,97 MKDIR3 CALL PATH              * Set PATH
<0545> D6CA 06,D5,79        CALL GETFN             * Directory name
<0546> D6CD BC,4C,17        ST   @DEVNUM,@FAC2     * SCS#
<0547> D6D0 BF,4E,03        DST  >03C2,@FAC4       * Name address
       D6D3 C2

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0058 
EQUATES ALCS-359
<0548> D6D4 06,D5,27        CALL DSKDSR            * DSRLNK
<0549> D6D7 01,28           DATA >0128             * Opcode MAKE DIRECTORY HARD
<0550> D6D9 D6,42,B3 MKDIR4 CEQ  COMMAZ,@CHAT      * ,
<0551> D6DC 76,8F           BS   MKDIR2            * Redo again
<0552> D6DE 43,16           BR   PEEK5
<0553>               *******************************
<0554> D6E0 D7,0E    RMDIR  DATA CUTDIR
<0555> D6E2 05,52,4D        STRI 'RMDIR'           CALL RMDIR(pathname,directory
       D6E5 44,49,52
<0556> D6E8 D6,EA           DATA $+2
<0557> D6EA 06,D1,00        CALL GLPARZ            * (
<0558> D6ED 06,D5,41 RMDIR2 CALL DSKNAM            * Pathname
<0559> D6F0 D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0560> D6F3 45,33           BR   ERRSYN
<0561> D6F5 06,D5,97        CALL PATH              * Set PATH
<0562> D6F8 06,D5,79        CALL GETFN             * Directory name
<0563> D6FB BC,4C,17        ST   @DEVNUM,@FAC2     * SCS#
<0564> D6FE BF,4E,03        DST  >03C2,@FAC4       * Name address
       D701 C2
<0565> D702 06,D5,27        CALL DSKDSR            * DSRLNK
<0566> D705 01,29           DATA >0129             * Opcode REMOVE DIRECTORY HAR
<0567> D707 D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0568> D70A 76,ED           BS   RMDIR2            * Redo again
<0569> D70C 43,16           BR   PEEK5
<0570>               *******************************
<0571> D70E D7,3A    CUTDIR DATA FCOPY
<0572> D710 06,43,55        STRI 'CUTDIR'          CALL CUTDIR(pathname,director
       D713 54,44,49
       D716 52
<0573> D717 D7,19           DATA $+2
<0574> D719 06,D1,00        CALL GLPARZ            * (
<0575> D71C 06,D5,41 CUTDI2 CALL DSKNAM            * Pathname
<0576> D71F D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0577> D722 45,33           BR   ERRSYN
<0578> D724 06,D5,79        CALL GETFN             * Set PATH
<0579> D727 BC,4C,17        ST   @DEVNUM,@FAC2     * SCS#
<0580> D72A BF,4E,03        DST  >03C2,@FAC4       * Name address
       D72D C2
<0581> D72E 06,D5,27        CALL DSKDSR            * DSRLNK
<0582> D731 01,2A           DATA >012A             * Opcode CUT DIRECTORY HARD
<0583> D733 D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0584> D736 77,1C           BS   CUTDI2            * Redo again
<0585> D738 43,16           BR   PEEK5
<0586>               *******************************
<0587> D73A D8,72    FCOPY  DATA SECTOR
<0588> D73C 05,46,43        STRI 'FCOPY'           CALL FCOPY(pathname,filename,
       D73F 4F,50,59
<0589> D742 D7,44           DATA $+2
<0590> D744 0F,70           XML  COMPCT            * GARBAGE COLLECT
<0591> D746 BD,5E,1A        DST  @STREND,@ARG2     * String end
<0592> D749 A5,5E,6E        DSUB @VSPTR,@ARG2      * Value Stack PoinTeR address
<0593> D74C A7,5E,00        DSUB 63,@ARG2          * Value stack size
       D74F 3F
<0594> D750 CB,5E,10        DCHE >1001,@ARG2       * Buffer size
       D753 01
<0595> D754 45,5A           BR   ERRSO             * Error Stack Overflow
<0596> D756 06,D1,00        CALL GLPARZ            * (
<0597> D759 86,00    FCOPY1 CLR  @VAR0             * Clear Additional info Buffe
<0598> D75B 35,00,0C        MOVE 12,@VAR0,@VARV    * Ripple
       D75E 01,00
<0599> D760 06,D5,41        CALL DSKNAM            * 1st pathname
<0600> D763 D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0601> D766 45,33           BR   ERRSYN
<0602> D768 BD,A3,8C        DST  @DFLAG,V@BUFSRT   * FLAG/DSK#

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0059 
EQUATES ALCS-359
       D76B 16
<0603> D76C BD,12,10        DST  @VAR5,@STRPTR     * 1st pathname
<0604> D76F 06,D5,79        CALL GETFN             * 1st filename
<0605> D772 D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0606> D775 45,33           BR   ERRSYN
<0607> D777 06,D5,41        CALL DSKNAM            * 2nd pathname
<0608> D77A D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0609> D77D 45,33           BR   ERRSYN
<0610> D77F BD,A3,8E        DST  @DFLAG,V@BUFEND   * FLAG/DSK#
       D782 16
<0611> D783 BD,14,10        DST  @VAR5,@CURLIN     * 2nd pathname
<0612> D786 06,D1,0C        CALL STRGET            * 2nd filename
<0613> D789 C6,51,0A        CH   10,@FAC7          * Length > 10 ?
<0614> D78C 65,3F           BS   ERRNTL            * Error Name Too Long
<0615> D78E 8E,51           CZ   @FAC7             * Length = 0?
<0616> D790 65,9A           BS   ERRBA             * Error Bad Argument
<0617> D792 34,50,A3        MOVE @FAC6,V*FAC4,V@>03D0 * 2nd filename into buffer
       D795 D0,B0,4E
<0618> D798 86,4D           CLR  @FAC3             * ADDitional INFO ACCESS CODE
<0619> D79A 06,D8,05        CALL FREAD             * READ FILE HEADER
<0620> D79D BD,1C,02        DST  @MNUM,@SREF       * Save number of Sectors of F
<0621> D7A0 86,4D           CLR  @FAC3             * ADDITIONAL INFO ACCESS CODE
<0622> D7A2 06,D8,35        CALL FWRTE             * WRITE FILE HEADER
<0623> D7A5 BD,5C,1C        DST  @SREF,@ARG        * Get Total number of Sectors
<0624> D7A8 87,4A           DCLR @FAC              * Clear PASS counter
<0625> D7AA CB,5C,00 FCOPY2 DCHE 4,@ARG            * ARG>=4 Sectors?
       D7AD 04
<0626> D7AE 77,B8           BS   FCOPY3            * Yes
<0627> D7B0 90,4A           INC  @FAC              * PASS+1
<0628> D7B2 BC,4B,5D        ST   @ARG1,@FAC1       * Save number of sectors left
<0629> D7B5 05,D7,C1        B    FCOPY4            * Done
<0630> D7B8 A7,5C,00 FCOPY3 DSUB 3,@ARG            * Sectors-3
       D7BB 03
<0631> D7BC 90,4A           INC  @FAC              * PASS+1
<0632> D7BE 05,D7,AA        B    FCOPY2            * Loop
<0633> D7C1 BD,1C,4A FCOPY4 DST  @FAC,@SREF        * PASS/Number of sectors left
<0634> D7C4 87,0E           DCLR @CURINC           * Sector Pointer
<0635> D7C6 D6,1C,01 FCOPY5 CEQ  1,@SREF           * Last PASS?
<0636> D7C9 57,D1           BR   FCOPY6            * No
<0637> D7CB BC,4D,1D        ST   @SREF+1,@FAC3     * Number of sectors Left to r
<0638> D7CE 05,D7,D4        B    FCOPY7            * Continue
<0639> D7D1 BE,4D,03 FCOPY6 ST   3,@FAC3           * 3 Sectors to read
<0640> D7D4 BD,A3,BA FCOPY7 DST  @CURINC,V@>03BA   * Save SECTOR NUMBER TO USE
       D7D7 0E
<0641> D7D8 BD,02,0E        DST  @CURINC,@MNUM     * SECTOR NUMBER TO USE
<0642> D7DB 06,D8,05        CALL FREAD             * READ FILE SECTOR
<0643> D7DE D6,1C,01        CEQ  1,@SREF           * Last PASS?
<0644> D7E1 57,E9           BR   FCOPY8            * No
<0645> D7E3 BC,4D,1D        ST   @SREF+1,@FAC3     * Number of sectors left to w
<0646> D7E6 05,D7,EC        B    FCOPY9            * Continue
<0647> D7E9 BE,4D,03 FCOPY8 ST   3,@FAC3           * 3 Sectors to write
<0648> D7EC BD,0E,A3 FCOPY9 DST  V@>03BA,@CURINC   * Get sectors to write
       D7EF BA
<0649> D7F0 BD,02,0E        DST  @CURINC,@MNUM     * SECTOR NUMBER TO USE
<0650> D7F3 06,D8,35        CALL FWRTE             * WRITE FILE SECTOR
<0651> D7F6 A3,0E,00        DADD 3,@CURINC         * SECTOR+3
       D7F9 03
<0652> D7FA 92,1C           DEC  @SREF             * PASS-1
<0653> D7FC 57,C6           BR   FCOPY5            * 0=END
<0654> D7FE D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0655> D801 77,59           BS   FCOPY1            * Redo again
<0656> D803 43,16           BR   PEEK5
<0657>               *******************************
<0658> D805 BD,16,A3 FREAD  DST  V@BUFSRT,@DFLAG   * 1st FLAG/DSR#

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0060 
EQUATES ALCS-359
       D808 8C
<0659> D809 8E,16           CZ   @DFLAG            * DSK?
<0660> D80B 78,13           BS   FREAD1            * Yes
<0661> D80D BD,10,12        DST  @STRPTR,@VAR5     * 1st path
<0662> D810 06,D5,97        CALL PATH              * Set PATH
<0663> D813 BF,00,10 FREAD1 DST  >1000,@VAR0       * Buffer address in Add info
       D816 00
<0664> D817 BC,4C,17        ST   @DEVNUM,@FAC2     * DSK#
<0665> D81A BF,4E,03        DST  >03C2,@FAC4       * 1st filename
       D81D C2
<0666> D81E 86,50           CLR  @FAC6             * Pointer to Additional info
<0667> D820 8E,16           CZ   @DFLAG            * DSK?
<0668> D822 78,2C           BS   FREAD2            * Yes
<0669> D824 BF,A3,C0        DST  >0124,V@>03C0     * Opcode INPUT HARD
       D827 01,24
<0670> D829 05,D8,31        B    FREAD3
<0671> D82C BF,A3,C0 FREAD2 DST  >0114,V@>03C0     * Opcode INPUT DISK
       D82F 01,14
<0672> D831 06,D8,65 FREAD3 CALL RWDSR             * DSRLNK
<0673> D834 00              RTN
<0674>               *******************************
<0675> D835 BD,16,A3 FWRTE  DST  V@BUFEND,@DFLAG   * 2nd FLAG/DSK#
       D838 8E
<0676> D839 8E,16           CZ   @DFLAG            * DSK?
<0677> D83B 78,43           BS   FWRTE1            * Yes
<0678> D83D BD,10,14        DST  @CURLIN,@VAR5     * 2nd PATH
<0679> D840 06,D5,97        CALL PATH              * Set PATH
<0680> D843 BF,00,10 FWRTE1 DST  >1000,@VAR0       * Buffer Address in Add info
       D846 00
<0681> D847 BC,4C,17        ST   @DEVNUM,@FAC2     * DSK#
<0682> D84A BF,4E,03        DST  >03D0,@FAC4       * 2nd Filename
       D84D D0
<0683> D84E 86,50           CLR  @FAC6             * Pointer to Add info block
<0684> D850 8E,16           CZ   @DFLAG            * DSK#
<0685> D852 78,5C           BS   FWRTE2            * Yes
<0686> D854 BF,A3,C0        DST  >0125,V@>03C0     * Opcode OUTPUT HARD
       D857 01,25
<0687> D859 05,D8,61        B    FWRTE3
<0688> D85C BF,A3,C0 FWRTE2 DST  >0115,V@>03C0     * Opcode OUTPUT DISK
       D85F 01,15
<0689> D861 06,D8,65 FWRTE3 CALL RWDSR             * DSKLNK
<0690> D864 00              RTN
<0691>               *******************************
<0692> D865 BF,56,03 RWDSR  DST >03C0,@FAC12       * Buffer address
       D868 C0
<0693> D869 06,00,10        CALL LINK              * DSRLNK
<0694> D86C 0A              BYTE >0A               * Subroutine
<0695> D86D 8E,50           CZ   @FAC6             * ERRORS?
<0696> D86F 45,B5           BR   ERRFE             * Yes, File Error
<0697> D871 00              RTN
<0698>               *******************************
<0699> D872 00,00    SECTOR DATA >0000
<0700> D874 06,53,45        STRI 'SECTOR'          CALL SECTOR(pathname,RWflag,#
       D877 43,54,4F
       D87A 52
<0701> D87B D8,7D           DATA $+2
<0702> D87D 0F,70           XML  COMPCT
<0703> D87F BD,5E,1A        DST  @STREND,@ARG2
<0704> D882 A5,5E,6E        DSUB @VSPTR,@ARG2
<0705> D885 A7,5E,00        DSUB 63,@ARG2
       D888 3F
<0706> D889 CB,5E,01        DCHE 260,@ARG2
       D88C 04
<0707> D88D 45,5A           BR   ERRSO

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0061 
EQUATES ALCS-359
<0708> D88F 06,D1,00        CALL GLPARZ            * (
<0709> D892 06,D5,41 SECTOS CALL DSKNAM            * Pathname
<0710> D895 D6,42,B3        CEQ  COMMAZ,@CHAT      * ,
<0711> D898 45,33           BR   ERRSYN
<0712> D89A 06,D1,26        CALL GETNUM            * R/W Flag
<0713> D89D 86,00           CLR  @VAR0             * WRITE Flag
<0714> D89F 8F,4A           DCZ  @FAC              * 0000?
<0715> D8A1 78,A5           BS   SECTO1
<0716> D8A3 90,00           INC  @VAR0             * READ Flag
<0717> D8A5 06,D1,26 SECTO1 CALL GETNUM            * #SECTORS
<0718> D8A8 8F,4A           DCZ  @FAC              * 0000?
<0719> D8AA 65,A2           BS   ERRBV
<0720> D8AC CB,4A,00        DCHE 33,@FAC           * Only 32 sectors allowed.
       D8AF 21
<0721> D8B0 65,A2           BS   ERRBV
<0722> D8B2 BC,01,4B        ST   @FAC1,@VARV       * Save # SECTORS
<0723> D8B5 06,D1,0C        CALL STRGET            * SECTOR $
<0724> D8B8 8F,50           DCZ  @FAC6             * 0 string length?
<0725> D8BA 65,A2           BS   ERRBV
<0726> D8BC 8E,16           CZ   @DFLAG            * DSK?
<0727> D8BE 58,C6           BR   SECTO2            * No.
<0728> D8C0 CB,50,00        DCHE 5,@FAC6           * String to long?
       D8C3 05
<0729> D8C4 65,A2           BS   ERRBV
<0730> D8C6 CB,50,00 SECTO2 DCHE 9,@FAC6           * String to long HARD?
       D8C9 09
<0731> D8CA 65,A2           BS   ERRBV
<0732> D8CC BD,0C,50        DST  @FAC6,@BYTES      * Save string length value.
<0733> D8CF A1,4E,50        DADD @FAC6,@FAC4       * Point past end of string.
<0734> D8D2 93,4E           DDEC @FAC4             * Offset to end of string.
<0735> D8D4 86,50           CLR  @FAC6             * Sector # buffer.
<0736> D8D6 35,00,04        MOVE 4,@FAC6,@FAC7     * Clear buffer.
       D8D9 51,50
<0737> D8DB BF,5C,03        DST  >03C3,@ARG        * # number pointer
       D8DE C3
<0738> D8DF 86,A3,C0        CLR  V@>03C0
<0739> D8E2 35,00,04        MOVE 4,V@>03C0,V@>03C1
       D8E5 A3,C1,A3
       D8E8 C0
<0740> D8E9 86,4A    SECTO3 CLR  @FAC
<0741> D8EB BC,4A,B0 SECTO4 ST   V*FAC4,@FAC       * Get character.
       D8EE 4E
<0742> D8EF CA,4A,47        CHE  71,@FAC           * G or higher?
<0743> D8F2 65,9A           BS   ERRBA
<0744> D8F4 CA,4A,41        CHE  65,@FAC           * A or higher?
<0745> D8F7 79,03           BS   SECTO5
<0746> D8F9 CA,4A,3A        CHE  58,@FAC           * : or higher?
<0747> D8FC 65,9A           BS   ERRBA
<0748> D8FE CA,4A,30        CHE  48,@FAC           * 0 or higher?
<0749> D901 45,9A           BR   ERRBA
<0750> D903 A6,4A,30 SECTO5 SUB  48,@FAC           * - 0
<0751> D906 CA,4A,0A        CHE  10,@FAC           * 10 or higher?
<0752> D909 59,0E           BR   SECTO6
<0753> D90B A6,4A,07        SUB  >07,@FAC          * - 7
<0754> D90E BC,4C,4A SECTO6 ST   @FAC,@FAC2        * Save nibble.
<0755> D911 93,4E           DDEC @FAC4             * $ pointer - 1
<0756> D913 93,0C           DDEC @BYTES            * $ length - 1
<0757> D915 59,1E           BR   SECTO7
<0758> D917 BC,B0,5C        ST   @FAC2,V*ARG       * Save #
       D91A 4C
<0759> D91B 05,D9,53        B    SECTOA            * End routine.
<0760> D91E BC,4A,B0 SECTO7 ST   V*FAC4,@FAC       * Get character.
       D921 4E
<0761> D922 CA,4A,47        CHE  71,@FAC           * G or higher?

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0062 
EQUATES ALCS-359
<0762> D925 65,9A           BS   ERRBA
<0763> D927 CA,4A,41        CHE  65,@FAC           * A or higher?
<0764> D92A 79,36           BS   SECTO8
<0765> D92C CA,4A,3A        CHE  58,@FAC           * : or higher?
<0766> D92F 65,9A           BS   ERRBA
<0767> D931 CA,4A,30        CHE  48,@FAC           * 0 or higher?
<0768> D934 45,9A           BR   ERRBA
<0769> D936 A6,4A,30 SECTO8 SUB  48,@FAC           * - 0
<0770> D939 CA,4A,0A        CHE  10,@FAC           * 10 or higher?
<0771> D93C 59,41           BR   SECTO9
<0772> D93E A6,4A,07        SUB  >07,@FAC          * - 7
<0773> D941 E2,4A,04 SECTO9 SLL  4,@FAC            * Swap nibbles.
<0774> D944 A0,4A,4C        ADD  @FAC2,@FAC        * Add old nibble.
<0775> D947 BC,B0,5C        ST   @FAC,V*ARG        * Save #
       D94A 4A
<0776> D94B 93,5C           DDEC @ARG              * # pointer - 1
<0777> D94D 93,4E           DDEC @FAC4             * $ pointer - 1
<0778> D94F 93,0C           DDEC @BYTES            * $ length - 1
<0779> D951 58,E9           BR   SECTO3
<0780> D953 35,00,04 SECTOA MOVE 4,V@>03C0,@FAC6   * Get #
       D956 50,A3,C0
<0781> D959 8E,16           CZ   @DFLAG            * DSK?
<0782> D95B 59,60           BR   SECTOB            * No.
<0783> D95D BD,50,52        DST  @FAC8,@FAC6       * DISK
<0784> D960 87,1C    SECTOB DCLR @SREF             * CPU BUFFER
<0785> D962 87,4A    SECTOC DCLR @FAC              * Clear Returned Sector.
<0786> D964 BC,4C,17        ST   @DEVNUM,@FAC2     * UNIT#
<0787> D967 BC,4D,00        ST   @VAR0,@FAC3       * R/W Flag.
<0788> D96A BF,4E,10        DST  >1000,@FAC4       * VDP BUFFER
       D96D 00
<0789> D96E 8E,16           CZ   @DFLAG            * DSK?
<0790> D970 79,7A           BS   SECTOD            * Yes.
<0791> D972 BF,A3,C0        DST  >0120,V@>03C0     * HARD
       D975 01,20
<0792> D977 05,D9,7F        B    SECTOE
<0793> D97A BF,A3,C0 SECTOD DST  >0110,V@>03C0     * DISK
       D97D 01,10
<0794> D97F 8E,00    SECTOE CZ   @VAR0             * WRITE FLAG?
<0795> D981 59,8D           BR   SECRD             * NO
<0796> D983 35,01,00        MOVE 256,@>2000(@SREF),V@>1000  * WRITE CPU BUFFER
       D986 AF,10,00
       D989 CF,9D,00
       D98C 1C
<0797> D98D 06,D8,65 SECRD  CALL RWDSR             * DSR Access.
<0798> D990 8E,00           CZ   @VAR0             * WRITE FLAG?
<0799> D992 79,9E           BS   SECWRT            * YES
<0800> D994 35,01,00        MOVE 256,V@>1000,@>2000(@SREF)  * READ VDP BUFFER
       D997 CF,9D,00
       D99A 1C,AF,10
       D99D 00
<0801> D99E A3,1C,01 SECWRT DADD 256,@SREF         * CPU BUFFER + 256
       D9A1 00
<0802> D9A2 8E,16           CZ   @DFLAG            * DSK?
<0803> D9A4 79,B3           BS   SECTOH            * Yes.
<0804> D9A6 D7,52,FF        DCEQ >FFFF,@FAC8       * Overflow one word?
       D9A9 FF
<0805> D9AA 79,B1           BS   SECTOG            * Yes.
<0806> D9AC 91,52           DINC @FAC8             * SECTOR# - 1 HARD
<0807> D9AE 05,D9,B5        B    SECTOI            * No.
<0808> D9B1 87,52    SECTOG DCLR @FAC8             * HARD
<0809> D9B3 91,50    SECTOH DINC @FAC6             * SECTOR# + 1 DISK & HARD
<0810> D9B5 92,01    SECTOI DEC  @VARV             * #SECTORS - 1
<0811> D9B7 59,62           BR   SECTOC
<0812> D9B9 D6,42,B3        CEQ  COMMAZ,@CHAT      * ,?

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0063 
EQUATES ALCS-359
<0813> D9BC 78,92           BS   SECTOS            * Repeat.
<0814> D9BE 43,16           BR   PEEK5
<0815>               ***********************************************************
<0816>                      END
Link to comment
Share on other sites

Oh my, took me some time to write this test program. I think I found all possible pitfalls* ...

 

But it is working, at least in MESS. This program reads a sector specified in SECTOR from the first hard disk and displays the contents on the screen.

 

 

       DEF  START
       REF  DSRLNK,VMBR,VMBW
 
WS     BSS  32
BUF    BSS  256
 
SECTOR DATA 0
 
PAB    BYTE 1
       BYTE >20
 
START  LIMI 0
       LWPI WS
       LI   R0,>1000
       LI   R1,PAB
       LI   R2,2
       BLWP @VMBW
       MOV  R0,@>8356
 
       LI   R0,>0101
       MOV  R0,@>834C
       LI   R0,>1800
       MOV  R0,@>834E
       MOV  @SECTOR,@>8350
       CLR  @>8352
 
       BLWP @DSRLNK
       DATA 10
 
       LI   R0,>1800
       LI   R1,BUF
       LI   R2,256
       BLWP @VMBR
 
       CLR  R0
       BLWP @VMBW
 
       LIMI 2
       JMP  $
 
       END
*Pitfalls: You can do the following to make life harder:

 

Forget to write a PAB at all

Forget to put the pointer in 8356

Put the wrong pointer in 8356

Try to address the first drive as number 0 (manual says they start at 1)

 

I am doing this in GPL no Assembly at all.

So I am using normal GPL Device Access per the TI GPL Device Access Interface.

As the code previously worked on SCSI that I know for a fact as I used it for years with no changes, and Dr. Charles Good said it worked on his HFDC I still think the issue is in MESS.

 

I am using the GROM 0 console DSR routines so that is a indication where the problem is.

 

Testing in Assembly directly just bypasses the problem entirely as it ignores the GROM 0 GPL Device Access entirely and would never show the problems.

Link to comment
Share on other sites

Can anyone test WIN994a with Hard Drive access in RXB 2012 and see if it works?

 

Specifically SECTOR and FCOPY in RXB to see if they work?

 

Ok so RXB needs some changes, WIN994a uses HDK as the name of hard drive so RXB currently only supports SCS or WDS for hard drives.

 

Even SCSI cards supported WDS1 but for some strange reason a new Hard Drive configuration was selected for WIN994a?

 

So now I am stuck re writing a new version of RXB so Hard Drive access works on these goofy configurations.

 

(Really what was wrong with using WDS?

Edited by RXB
Link to comment
Share on other sites

<0776> D94B 93,5C DDEC @ARG * # pointer - 1

<0777> D94D 93,4E DDEC @FAC4 * $ pointer - 1

<0778> D94F 93,0C DDEC @BYTES * $ length - 1

<0779> D951 58,E9 BR SECTO3

<0780> D953 35,00,04 SECTOA MOVE 4,V@>03C0,@FAC6 * Get #

D956 50,A3,C0

<0781> D959 8E,16 CZ @DFLAG * DSK?

<0782> D95B 59,60 BR SECTOB * No.

<0783> D95D BD,50,52 DST @FAC8,@FAC6 * DISK

<0784> D960 87,1C SECTOB DCLR @SREF * CPU BUFFER

<0785> D962 87,4A SECTOC DCLR @FAC * Clear Returned Sector.

<0786> D964 BC,4C,17 ST @DEVNUM,@FAC2 * UNIT#

<0787> D967 BC,4D,00 ST @VAR0,@FAC3 * R/W Flag.

<0788> D96A BF,4E,10 DST >1000,@FAC4 * VDP BUFFER

D96D 00

<0789> D96E 8E,16 CZ @DFLAG * DSK?

<0790> D970 79,7A BS SECTOD * Yes.

<0791> D972 BF,A3,C0 DST >0120,V@>03C0 * HARD

D975 01,20

<0792> D977 05,D9,7F B SECTOE

<0793> D97A BF,A3,C0 SECTOD DST >0110,V@>03C0 * DISK

D97D 01,10

<0794> D97F 8E,00 SECTOE CZ @VAR0 * WRITE FLAG?

<0795> D981 59,8D BR SECRD * NO

<0796> D983 35,01,00 MOVE 256,@>2000(@SREF),V@>1000 * WRITE CPU BUFFER

D986 AF,10,00

D989 CF,9D,00

D98C 1C

<0797> D98D 06,D8,65 SECRD CALL RWDSR * DSR Access.

Rich - I scanned through the SECTOR code. I am not a GPL person so I could be missing this, but when you set the sector number prior to the DSR call, where are you writing a proper value into 0x8352? This is the most significant bit word of the 20-bit sector number. If you request a sector below 65535 and have not cleared 0x8352, the DSR will try to read a larger sector number than you expect. I see FAC8 cleared at SECTOG, but not prior to the actual DSR call.

 

I may be misreading the code and this may have nothing to do with the HFDC/MESS issue, it's just what I notice as I scan your source.

 

Edit: Correction to definition of 0x8352 above.

Edited by InsaneMultitasker
Link to comment
Share on other sites

Ok I definitely need to use MESS to create and assemble GPL code and test it in MESS.

 

How do you set up a GRAMKRACKER in MESS and use it if RXB is in the secondary GRAM page and I keep the first GRAM page empty for testing in MESS?

Link to comment
Share on other sites

In addition to my earlier comments tonight about the FAC, I wanted to say your disk code looks good. It gives me some insight into the power of GPL programming. Thanks for sharing.

You know the DIsk Manager and Disk Manager 2 and Disk Manager 3 Carts has zero Assembly?

 

Other than OPCODE is different for DISK vs HARD drives GPL does a great job, but from XB was a pain as so little memory is left for much else.

 

I have given thought to a new Cart for Hard/Disk/Device management. After all GPL will work with Cassette Tape/Disk/Hard/Wafer Tape and RAMDISK.

  • Like 1
Link to comment
Share on other sites

Testing in Assembly directly just bypasses the problem entirely as it ignores the GROM 0 GPL Device Access entirely and would never show the problems.

Well, it would, if there really were an issue with the emulation in MESS. Eventually, the GPL access will call the subprogram in the HFDC card, so that is the point where GSRLNK and DSRLNK will meet. My test program just goes the assembly path.

 

One thing that can happen, as Tim said, is that we may have an unwanted value in 8352. I am not sure whether the PAD RAM is initialized on startup ...[wait]

 

Ahh, yes, I got it!

 

You can make good use of the MESS debugger at this point. Start on the command line using the "-debug" switch. Place a breakpoint at >4114 (input line at the bottom) like that

 

bpset 4114
Type "go" to let the emulation go.

 

Go into RXB, enter

 

CALL SECTOR("WDS1.",1,1,"0")
The execution will be suspended at the breakpoint. Go to the debug window, open a memory inspection window with CTRL-M. Check that the memory selection is "TMS9900 ':maincpu' program space memory". Type 8300 into the entry field on the left. Look at the second word in the line 8350. It is not zero.

 

Go back to the debug window, type "go". You'll get the "file error".

 

Enter CALL SECTOR again as above. The breakpoint is still there. Go to the memory window, click on the second word (it's 03C2 for me), type 0000 over it. Go back to the debug window, type "go"

 

... and you'll see that the SECTOR subprogram returns without error!

Link to comment
Share on other sites

Well, it would, if there really were an issue with the emulation in MESS. Eventually, the GPL access will call the subprogram in the HFDC card, so that is the point where GSRLNK and DSRLNK will meet. My test program just goes the assembly path.

 

One thing that can happen, as Tim said, is that we may have an unwanted value in 8352. I am not sure whether the PAD RAM is initialized on startup ...[wait]

 

Ahh, yes, I got it!

 

You can make good use of the MESS debugger at this point. Start on the command line using the "-debug" switch. Place a breakpoint at >4114 (input line at the bottom) like that

 

bpset 4114
Type "go" to let the emulation go.

 

Go into RXB, enter

 

CALL SECTOR("WDS1.",1,1,"0")
The execution will be suspended at the breakpoint. Go to the debug window, open a memory inspection window with CTRL-M. Check that the memory selection is "TMS9900 ':maincpu' program space memory". Type 8300 into the entry field on the left. Look at the second word in the line 8350. It is not zero.

 

Go back to the debug window, type "go". You'll get the "file error".

 

Enter CALL SECTOR again as above. The breakpoint is still there. Go to the memory window, click on the second word (it's 03C2 for me), type 0000 over it. Go back to the debug window, type "go"

 

... and you'll see that the SECTOR subprogram returns without error!

 

Cool so if I re-write RXB using MESS how do I load the GPL code into MESS like I would with a GRAMKRACKER?

 

Now that the Hard Drive works and I can Assembly GPL I just need a way to load the GPL into GRAM using GPL*LOADER that loads Ryte Data GPL Assembler Compressed Object code.

Edited by RXB
Link to comment
Share on other sites

Hey why does this work in Classic99 and not in MESS on Disk or Hard Drives?

100 ! COPY DIR TO DIR
110 CALL CLEAR
120 INPUT "MASTERPATH:":M$
130 INPUT "COPY  PATH:":C$
140 OPEN #1:M$,INTERNAL,INPUT,FIXED 38
150 INPUT #1:A$,B,C,D
160 X=X+1 :: IF X=1 THEN 150
170 IF LEN(A$)=0 THEN CALL CLSALL :: RUN
180 PRINT X-1: :C$&A$
190 CALL FCOPY(M$,A$,C$,A$)
200 GOTO 150

I used TI Image to make a blank DSK1 then put it in DISK 1 and GPLASSM in DISK4

It copies from DSK4 to DSK1 but then TI IMAGE TOOL will not delete or modify DSK1 any more at all?

 

I can unprotect them and delete them with RXB but TI IMAGE TOOL will not do anything to that DISK?

Edited by RXB
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...