Translate source code in x68k (#289)

* Translate code comments

* Remove documentation that is contained in wiki

* Translate code comments

* Remove documentation that is contained in wiki

* Translate configuration file

* Remove documentation that is covered by wiki

* Translate code comments

* Translate strings and code comments

* Cleanup
This commit is contained in:
Daniel Markstedt
2021-10-01 13:23:53 -07:00
committed by GitHub
parent 6d32a8d102
commit af4e3dfe80
11 changed files with 787 additions and 870 deletions

View File

@@ -1,11 +0,0 @@
X68000 commands for the management tool (rasctl)
Overview
This is a program for using the RaSCSI management tool (rasctl) to interface with
a real X68000 computer running Human68k over the RaSCSI bridge device.
Description
It has the exact same functionality as the management tool (rasctl) running on
the Raspberry Pi, so please refer to the RaSCSI documentation for instructions.

File diff suppressed because it is too large Load Diff

View File

@@ -3,9 +3,9 @@
// SCSI Target Emulator RaSCSI (*^..^*)
// for Raspberry Pi
//
// Powered by XM6 TypeG Technorogy.
// Powered by XM6 TypeG Technology.
// Copyright (C) 2016-2017 GIMONS
// [ <EFBFBD>z<EFBFBD>X<EFBFBD>g<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>V<EFBFBD>X<EFBFBD>e<EFBFBD><65> <20>u<EFBFBD><75><EFBFBD>b<EFBFBD>W<EFBFBD>h<EFBFBD><68><EFBFBD>C<EFBFBD>o ]
// [ Host Filesystem Bridge Driver ]
//
//---------------------------------------------------------------------------
@@ -30,7 +30,7 @@ typedef int BOOL;
//---------------------------------------------------------------------------
//
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>`
// Constant definitions
//
//---------------------------------------------------------------------------
#define FILEPATH_MAX _MAX_PATH
@@ -38,219 +38,218 @@ typedef int BOOL;
//---------------------------------------------------------------------------
//
// <EFBFBD>X<EFBFBD>e<EFBFBD>[<5B>^<5E>X<EFBFBD>R<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>`
// Status code definitions
//
//---------------------------------------------------------------------------
#define FS_INVALIDFUNC 0xFFFFFFFF // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȃt<EFBFBD>@<40><><EFBFBD>N<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD>
#define FS_FILENOTFND 0xFFFFFFFE // <EFBFBD>w<EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><C282><EFBFBD><EFBFBD>Ȃ<EFBFBD>
#define FS_DIRNOTFND 0xFFFFFFFD // <EFBFBD>w<EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD>
#define FS_OVEROPENED 0xFFFFFFFC // <EFBFBD>I<EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FS_CANTACCESS 0xFFFFFFFB // <EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><78><EFBFBD>̓A<CD83>N<EFBFBD>Z<EFBFBD>X<EFBFBD>s<EFBFBD><73>
#define FS_NOTOPENED 0xFFFFFFFA // <EFBFBD>w<EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>̓I<EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>Ȃ<EFBFBD>
#define FS_INVALIDMEM 0xFFFFFFF9 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǘ<EFBFBD><EFBFBD>̈悪<EFBFBD>j<EFBFBD>󂳂ꂽ
#define FS_OUTOFMEM 0xFFFFFFF8 // <EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>ɕK<EFBFBD>v<EFBFBD>ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD>
#define FS_INVALIDPTR 0xFFFFFFF7 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǘ<EFBFBD><EFBFBD>|<7C>C<EFBFBD><43><EFBFBD>^<5E><><EFBFBD>w<EFBFBD><EFBFBD><E882B5>
#define FS_INVALIDENV 0xFFFFFFF6 // <EFBFBD>s<EFBFBD><EFBFBD><EFBFBD>Ȋ‹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>
#define FS_ILLEGALFMT 0xFFFFFFF5 // <EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̃t<CC83>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD><67><EFBFBD>ُ<EFBFBD>
#define FS_ILLEGALMOD 0xFFFFFFF4 // <EFBFBD>I<EFBFBD>[<5B>v<EFBFBD><76><EFBFBD>̃A<CC83>N<EFBFBD>Z<EFBFBD>X<EFBFBD><58><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>ُ<EFBFBD>
#define FS_INVALIDPATH 0xFFFFFFF3 // <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>̎w<CC8E><77><EFBFBD>Ɍ<EFBFBD><C98C><EFBFBD><E882AA><EFBFBD><EFBFBD>
#define FS_INVALIDPRM 0xFFFFFFF2 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȃp<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>^<5E>ŃR<C583>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FS_INVALIDDRV 0xFFFFFFF1 // <EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u<EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>Ɍ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FS_DELCURDIR 0xFFFFFFF0 // <EFBFBD>J<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>͍폜<EFBFBD>ł<EFBFBD><EFBFBD>Ȃ<EFBFBD>
#define FS_NOTIOCTRL 0xFFFFFFEF // IOCTRL<EFBFBD>ł<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X
#define FS_LASTFILE 0xFFFFFFEE // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȏ<EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><C282><EFBFBD><EFBFBD>Ȃ<EFBFBD>
#define FS_CANTWRITE 0xFFFFFFED // <EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>̃t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>͏<EFBFBD><CD8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݂ł<DD82><C582>Ȃ<EFBFBD>
#define FS_DIRALREADY 0xFFFFFFEC // <EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>̃f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>͊<EFBFBD><EFBFBD>ɓo<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>
#define FS_CANTDELETE 0xFFFFFFEB // <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ō폜<C58D>ł<EFBFBD><C582>Ȃ<EFBFBD>
#define FS_CANTRENAME 0xFFFFFFEA // <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂Ń<CC82><C583>l<EFBFBD>[<5B><><EFBFBD>ł<EFBFBD><C582>Ȃ<EFBFBD>
#define FS_DISKFULL 0xFFFFFFE9 // <EFBFBD>f<EFBFBD>B<EFBFBD>X<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>Ńt<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD>
#define FS_DIRFULL 0xFFFFFFE8 // <EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>Ńt<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD>
#define FS_CANTSEEK 0xFFFFFFE7 // <EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>̈ʒu<EFBFBD>ɂ̓V<EFBFBD>[<5B>N<EFBFBD>ł<EFBFBD><C582>Ȃ<EFBFBD>
#define FS_SUPERVISOR 0xFFFFFFE6 // <EFBFBD>X<EFBFBD>[<5B>p<EFBFBD>[<5B>o<EFBFBD>C<EFBFBD>U<EFBFBD><55><EFBFBD>ԂŃX<C583>[<5B>p<EFBFBD>o<EFBFBD>C<EFBFBD>U<EFBFBD>w<EFBFBD><EFBFBD><E882B5>
#define FS_THREADNAME 0xFFFFFFE5 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><EFBFBD><EFBFBD>
#define FS_BUFWRITE 0xFFFFFFE4 // <EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD>X<EFBFBD>ԒʐM<EFBFBD>̃o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݋֎~
#define FS_BACKGROUND 0xFFFFFFE3 // <EFBFBD>o<EFBFBD>b<EFBFBD>N<EFBFBD>O<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>Ȃ<EFBFBD>
#define FS_OUTOFLOCK 0xFFFFFFE0 // <EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>̈悪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD>
#define FS_LOCKED 0xFFFFFFDF // <EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>ăA<EFBFBD>N<EFBFBD>Z<EFBFBD>X<EFBFBD>ł<EFBFBD><EFBFBD>Ȃ<EFBFBD>
#define FS_DRIVEOPENED 0xFFFFFFDE // <EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>̃h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u<EFBFBD>̓n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>
#define FS_LINKOVER 0xFFFFFFDD // <EFBFBD>V<EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>l<EFBFBD>X<EFBFBD>g<EFBFBD><67>16<31><36><EFBFBD>𒴂<EFBFBD><F092B482><EFBFBD>
#define FS_FILEEXIST 0xFFFFFFB0 // <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82><EFBFBD>
#define FS_INVALIDFUNC 0xFFFFFFFF // Executed an invalid function
#define FS_FILENOTFND 0xFFFFFFFE // The selected file can not be found
#define FS_DIRNOTFND 0xFFFFFFFD // The selected directory can not be found
#define FS_OVEROPENED 0xFFFFFFFC // There are too many files open
#define FS_CANTACCESS 0xFFFFFFFB // Can not access the direcory or volume
#define FS_NOTOPENED 0xFFFFFFFA // The selected handle is not opened
#define FS_INVALIDMEM 0xFFFFFFF9 // Memory management has been destroyed
#define FS_OUTOFMEM 0xFFFFFFF8 // Insufficient memory for execution
#define FS_INVALIDPTR 0xFFFFFFF7 // Selected an invalid memory management pointer
#define FS_INVALIDENV 0xFFFFFFF6 // Selected an invalid environment
#define FS_ILLEGALFMT 0xFFFFFFF5 // The exeucted file is in an invalid format
#define FS_ILLEGALMOD 0xFFFFFFF4 // Invalid open access mode
#define FS_INVALIDPATH 0xFFFFFFF3 // Mistake in selected file name
#define FS_INVALIDPRM 0xFFFFFFF2 // Called with an invalid parameter
#define FS_INVALIDDRV 0xFFFFFFF1 // Mistake in selected drive
#define FS_DELCURDIR 0xFFFFFFF0 // Unable to delete the current directory
#define FS_NOTIOCTRL 0xFFFFFFEF // Unable to use IOCTRL with the device
#define FS_LASTFILE 0xFFFFFFEE // Can not find any more files
#define FS_CANTWRITE 0xFFFFFFED // Selected file can not be written
#define FS_DIRALREADY 0xFFFFFFEC // Selected directory is already registered
#define FS_CANTDELETE 0xFFFFFFEB // Can not delete because of a file
#define FS_CANTRENAME 0xFFFFFFEA // Can not rename because of a file
#define FS_DISKFULL 0xFFFFFFE9 // Can not create a file because the disk is full
#define FS_DIRFULL 0xFFFFFFE8 // Can not create a file because the directory is full
#define FS_CANTSEEK 0xFFFFFFE7 // Can not seek in the selected location
#define FS_SUPERVISOR 0xFFFFFFE6 // Selected supervisor in supervisor mode
#define FS_THREADNAME 0xFFFFFFE5 // A thread with this name already exists
#define FS_BUFWRITE 0xFFFFFFE4 // Writing to inter-process communication buffers is disallowed
#define FS_BACKGROUND 0xFFFFFFE3 // Unable to start a background process
#define FS_OUTOFLOCK 0xFFFFFFE0 // Insufficient lock space
#define FS_LOCKED 0xFFFFFFDF // Can not access because it is locked
#define FS_DRIVEOPENED 0xFFFFFFDE // Selected drive has an open handler
#define FS_LINKOVER 0xFFFFFFDD // The symbolic link is nested over 16 times
#define FS_FILEEXIST 0xFFFFFFB0 // The file exists
#define FS_FATAL_MEDIAOFFLINE 0xFFFFFFA3 // <EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>B<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>Ȃ<EFBFBD>
#define FS_FATAL_WRITEPROTECT 0xFFFFFFA2 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݋֎~<7E>
#define FS_FATAL_INVALIDCOMMAND 0xFFFFFFA1 // <EFBFBD>s<EFBFBD><EFBFBD><EFBFBD>ȃR<EFBFBD>}<7D><><EFBFBD>h<EFBFBD>ԍ<EFBFBD>
#define FS_FATAL_INVALIDUNIT 0xFFFFFFA0 // <EFBFBD>s<EFBFBD><EFBFBD><EFBFBD>ȃ<EFBFBD><EFBFBD>j<EFBFBD>b<EFBFBD>g<EFBFBD>ԍ<EFBFBD>
#define FS_FATAL_MEDIAOFFLINE 0xFFFFFFA3 // No media inserted
#define FS_FATAL_WRITEPROTECT 0xFFFFFFA2 // Write protected
#define FS_FATAL_INVALIDCOMMAND 0xFFFFFFA1 // Invalid command number
#define FS_FATAL_INVALIDUNIT 0xFFFFFFA0 // Invalid unit number
#define HUMAN68K_PATH_MAX 96 // Human68k<EFBFBD>̃p<EFBFBD>X<EFBFBD>ő咷
#define HUMAN68K_PATH_MAX 96 // Longest path allowed in Human68k
//===========================================================================
//
/// Human68k <EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// Human68k name space
//
//===========================================================================
/// <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>r<EFBFBD>b<EFBFBD>g
/// File attribute bit
enum attribute_t {
AT_READONLY = 0x01, // <EFBFBD>ǂݍ<EFBFBD><EFBFBD>ݐ<EFBFBD><EFBFBD>p<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AT_HIDDEN = 0x02, // <EFBFBD>B<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AT_SYSTEM = 0x04, // <EFBFBD>V<EFBFBD>X<EFBFBD>e<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AT_VOLUME = 0x08, // <EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AT_DIRECTORY= 0x10, // <EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AT_ARCHIVE = 0x20, // <EFBFBD>A<EFBFBD>[<5B>J<EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD>
AT_ALL = 0xFF, // <EFBFBD>S<EFBFBD>Ă̑<EFBFBD><EFBFBD><EFBFBD><EFBFBD>r<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD>1
AT_READONLY = 0x01, // Read only attribute
AT_HIDDEN = 0x02, // Hidden attribute
AT_SYSTEM = 0x04, // System attribute
AT_VOLUME = 0x08, // Volume label attribute
AT_DIRECTORY = 0x10, // Directory attribute
AT_ARCHIVE = 0x20, // Archive attribute
AT_ALL = 0xFF, // All attribute bits are 1
};
/// <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>I<EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>[<5B>h
/// File open modes
enum open_t {
OP_READ = 0, // <EFBFBD>ǂݍ<EFBFBD><EFBFBD><EFBFBD>
OP_WRITE = 1, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
OP_FULL = 2, // <EFBFBD>ǂݏ<EFBFBD><EFBFBD><EFBFBD>
OP_MASK = 0x0F, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>}<7D>X<EFBFBD>N
OP_SHARE_NONE = 0x10, // <EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>֎~
OP_SHARE_READ = 0x20, // <EFBFBD>ǂݍ<EFBFBD><EFBFBD>݋<EFBFBD><EFBFBD>L
OP_SHARE_WRITE = 0x30, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݋<EFBFBD><EFBFBD>L
OP_SHARE_FULL = 0x40, // <EFBFBD>ǂݏ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L
OP_SHARE_MASK = 0x70, // <EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>}<7D>X<EFBFBD>N
OP_SPECIAL = 0x100,// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>N<EFBFBD>Z<EFBFBD>X
OP_READ = 0, // Read
OP_WRITE = 1, // Write
OP_FULL = 2, // Read/Write
OP_MASK = 0x0F, // Decision mask
OP_SHARE_NONE = 0x10, // Sharing forbidden
OP_SHARE_READ = 0x20, // Read sharing
OP_SHARE_WRITE = 0x30, // Write sharing
OP_SHARE_FULL = 0x40, // Read/Write sharing
OP_SHARE_MASK = 0x70, // Sharing decision mask
OP_SPECIAL = 0x100, // Dictionary access
};
/// <EFBFBD>V<EFBFBD>[<5B>N<EFBFBD><4E><EFBFBD><EFBFBD>
/// Seek types
enum seek_t {
SK_BEGIN = 0, // <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><E693AA><EFBFBD><EFBFBD>
SK_CURRENT = 1, // <EFBFBD><EFBFBD><EFBFBD>݈ʒu<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SK_END = 2, // <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SK_BEGIN = 0, // From the beginning of a file
SK_CURRENT = 1, // From the current location
SK_END = 2, // From the end of the file
};
/// <EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>B<EFBFBD>A<EFBFBD>o<EFBFBD>C<EFBFBD>g
/// Media byte
enum media_t {
MEDIA_2DD_10 = 0xE0, // 2DD/10<EFBFBD>Z<EFBFBD>N<EFBFBD>^
MEDIA_1D_9 = 0xE5, // 1D/9<EFBFBD>Z<EFBFBD>N<EFBFBD>^
MEDIA_2D_9 = 0xE6, // 2D/9<EFBFBD>Z<EFBFBD>N<EFBFBD>^
MEDIA_1D_8 = 0xE7, // 1D/8<EFBFBD>Z<EFBFBD>N<EFBFBD>^
MEDIA_2D_8 = 0xE8, // 2D/8<EFBFBD>Z<EFBFBD>N<EFBFBD>^
MEDIA_2HT = 0xEA, // 2HT
MEDIA_2HS = 0xEB, // 2HS
MEDIA_2HDE = 0xEC, // 2DDE
MEDIA_1DD_9 = 0xEE, // 1DD/9<EFBFBD>Z<EFBFBD>N<EFBFBD>^
MEDIA_1DD_8 = 0xEF, // 1DD/8<EFBFBD>Z<EFBFBD>N<EFBFBD>^
MEDIA_MANUAL = 0xF1, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>g<EFBFBD>h<EFBFBD><68><EFBFBD>C<EFBFBD>u (<28><EFBFBD>C<EFBFBD>W<EFBFBD>F<EFBFBD>N<EFBFBD>g)
MEDIA_REMOVABLE = 0xF2, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>g<EFBFBD>h<EFBFBD><68><EFBFBD>C<EFBFBD>u (<28><><EFBFBD><EFBFBD><EFBFBD>[<5B>o<EFBFBD>u<EFBFBD><75>)
MEDIA_REMOTE = 0xF3, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>g<EFBFBD>h<EFBFBD><68><EFBFBD>C<EFBFBD>u
MEDIA_DAT = 0xF4, // SCSI-DAT
MEDIA_CDROM = 0xF5, // SCSI-CDROM
MEDIA_MO = 0xF6, // SCSI-MO
MEDIA_SCSI_HD = 0xF7, // SCSI-HD
MEDIA_SASI_HD = 0xF8, // SASI-HD
MEDIA_RAMDISK = 0xF9, // RAM<EFBFBD>f<EFBFBD>B<EFBFBD>X<EFBFBD>N
MEDIA_2HQ = 0xFA, // 2HQ
MEDIA_2DD_8 = 0xFB, // 2DD/8<EFBFBD>Z<EFBFBD>N<EFBFBD>^
MEDIA_2DD_9 = 0xFC, // 2DD/9<EFBFBD>Z<EFBFBD>N<EFBFBD>^
MEDIA_2HC = 0xFD, // 2HC
MEDIA_2HD = 0xFE, // 2HD
MEDIA_2DD_10 = 0xE0, // 2DD/10 sector
MEDIA_1D_9 = 0xE5, // 1D/9 sector
MEDIA_2D_9 = 0xE6, // 2D/9 sector
MEDIA_1D_8 = 0xE7, // 1D/8 sector
MEDIA_2D_8 = 0xE8, // 2D/8 sector
MEDIA_2HT = 0xEA, // 2HT
MEDIA_2HS = 0xEB, // 2HS
MEDIA_2HDE = 0xEC, // 2DDE
MEDIA_1DD_9 = 0xEE, // 1DD/9 sector
MEDIA_1DD_8 = 0xEF, // 1DD/8 sector
MEDIA_MANUAL = 0xF1, // Remote drive (manual eject)
MEDIA_REMOVABLE = 0xF2, // Remote drive (removable)
MEDIA_REMOTE = 0xF3, // Remote drive
MEDIA_DAT = 0xF4, // SCSI-DAT
MEDIA_CDROM = 0xF5, // SCSI-CDROM
MEDIA_MO = 0xF6, // SCSI-MO
MEDIA_SCSI_HD = 0xF7, // SCSI-HD
MEDIA_SASI_HD = 0xF8, // SASI-HD
MEDIA_RAMDISK = 0xF9, // RAM disk
MEDIA_2HQ = 0xFA, // 2HQ
MEDIA_2DD_8 = 0xFB, // 2DD/8 sector
MEDIA_2DD_9 = 0xFC, // 2DD/9 sector
MEDIA_2HC = 0xFD, // 2HC
MEDIA_2HD = 0xFE, // 2HD
};
/// namests<EFBFBD>\<5C><><EFBFBD><EFBFBD>
/// namests struct
typedef struct {
BYTE wildcard; // <EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD>J<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE drive; // <EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
BYTE path[65]; // <EFBFBD>p<EFBFBD>X(<28>T<EFBFBD>u<EFBFBD>f<EFBFBD>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67>+/)
BYTE name[8]; // <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD> (PADDING 0x20)
BYTE ext[3]; // <EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>q (PADDING 0x20)
BYTE add[10]; // <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>lj<EFBFBD> (PADDING 0x00)
BYTE wildcard; // Wildcard character length
BYTE drive; // Drive number
BYTE path[65]; // Path (subdirectory +/)
BYTE name[8]; // File name (PADDING 0x20)
BYTE ext[3]; // Extension (PADDING 0x20)
BYTE add[10]; // File name addition (PADDING 0x00)
} namests_t;
/// files<EFBFBD>\<5C><><EFBFBD><EFBFBD>
/// files struct
typedef struct {
BYTE fatr; // + 0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09>Ǎ<EFBFBD><C78D><EFBFBD><EFBFBD>p
BYTE fatr; // + 0 search attribute; read-only
BYTE pad1[3]; // padding
// BYTE drive; // + 1 <EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD> <09>Ǎ<EFBFBD><C78D><EFBFBD><EFBFBD>p
DWORD sector; // + 2 <EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>̃Z<EFBFBD>N<EFBFBD>^ DOS _FILES<45><EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD>ő<EFBFBD><C591>p
// WORD cluster; // + 6 <EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>̃N<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>^ <09>ڍוs<D795><73> (<28><><EFBFBD>g<EFBFBD>p)
WORD offset; // + 8 <EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p
// BYTE name[8]; // +10 <EFBFBD><EFBFBD><EFBFBD>Ɨp<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD> <09>Ǎ<EFBFBD><C78D><EFBFBD><EFBFBD>p (<28><><EFBFBD>g<EFBFBD>p)
// BYTE ext[3]; // +18 <EFBFBD><EFBFBD><EFBFBD>Ɨp<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>q <09>Ǎ<EFBFBD><C78D><EFBFBD><EFBFBD>p (<28><><EFBFBD>g<EFBFBD>p)
BYTE attr; // +21 <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p
// BYTE drive; // + 1 drive number; read-only
DWORD sector; // + 2 directory sector; DOS _FILES first address substitute
// WORD cluster; // + 6 directory cluster; details unknown (unused)
WORD offset; // + 8 directory entry; write-only
// BYTE name[8]; // +10 working file name; write-only (unused)
// BYTE ext[3]; // +18 working extension; write-only (unused)
BYTE attr; // +21 file attribute; write-only
BYTE pad2; // padding
WORD time; // +22 <EFBFBD>ŏI<EFBFBD>ύX<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p
WORD date; // +24 <EFBFBD>ŏI<EFBFBD>ύX<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p
DWORD size; // +26 <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>T<EFBFBD>C<EFBFBD>Y <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p
BYTE full[23]; // +30 <EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p
WORD time; // +22 last change time of day; write-only
WORD date; // +24 last change date; write-only
DWORD size; // +26 file size; write-only
BYTE full[23]; // +30 full name; write-only
BYTE pad3; // padding
} files_t;
/// FCB<43>\<5C><><EFBFBD><EFBFBD>
typedef struct {
// BYTE pad00[6]; // + 0<EFBFBD>`+ 5 (<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>p)
DWORD fileptr; // + 6<EFBFBD>`+ 9 <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>|<7C>C<EFBFBD><43><EFBFBD>^
// BYTE pad01[4]; // +10<EFBFBD>`+13 (<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>p)
WORD mode; // +14<EFBFBD>`+15 <EFBFBD>I<EFBFBD>[<5B>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>[<5B>h
// BYTE pad02[16]; // +16<EFBFBD>`+31 (<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>p)
// DWORD zero; // +32<EFBFBD>`+35 <EFBFBD>I<EFBFBD>[<5B>v<EFBFBD><76><EFBFBD>̂Ƃ<CC82>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>Ă<EFBFBD><C482><EFBFBD> (<28><><EFBFBD>g<EFBFBD>p)
// BYTE name[8]; // +36<EFBFBD>`+43 <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD> (PADDING 0x20) (<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>p)
// BYTE ext[3]; // +44<EFBFBD>`+46 <EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>q (PADDING 0x20) (<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>p)
BYTE attr; // +47 <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE pad; // padding
// BYTE add[10]; // +48<34>`+57 <09>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>lj<EFBFBD> (PADDING 0x00) (<28><><EFBFBD>g<EFBFBD>p)
WORD time; // +58<EFBFBD>`+59 <09>ŏI<C58F>ύX<CF8D><58><EFBFBD><EFBFBD>
WORD date; // +60<36>`+61 <09>ŏI<C58F>ύX<CF8D><58><EFBFBD><EFBFBD>
// WORD cluster; // +62<36>`+63 <09>N<EFBFBD><4E><EFBFBD>X<EFBFBD>^<5E>ԍ<EFBFBD> (<28><><EFBFBD>g<EFBFBD>p)
DWORD size; // +64<36>`+67 <09>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>T<EFBFBD>C<EFBFBD>Y
// BYTE pad03[28]; // +68<36>`+95 FAT<41>L<EFBFBD><4C><EFBFBD>b<EFBFBD>V<EFBFBD><56> (<28><><EFBFBD>g<EFBFBD>p)
// BYTE pad00[6]; // + 0~+ 5 (unused)
DWORD fileptr; // + 6~+ 9 file pointer
// BYTE pad01[4]; // +10~+13 (unused)
WORD mode; // +14~+15 open mode
// BYTE pad02[16]; // +16~+31 (unused)
// DWORD zero; // +32~+35 zeros are written when opened (unused)
// BYTE name[8]; // +36~+43 file name (PADDING 0x20) (unused)
// BYTE ext[3]; // +44~+46 extension (PADDING 0x20) (unused)
BYTE attr; // +47 file attribute
// BYTE add[10]; // +48~+57 file name addition (PADDING 0x00) (unused)
WORD time; // +58~+59 last change time of day
WORD date; // +60~+61 last change date
// WORD cluster; // +62~+63 cluster number (unused)
DWORD size; // +64~+67 file size
// BYTE pad03[28]; // +68~+95 FAT cache (unused)
} fcb_t;
/// capacity<EFBFBD>\<5C><><EFBFBD><EFBFBD>
/// capacity struct
typedef struct {
WORD freearea; // + 0 <EFBFBD>g<EFBFBD>p<EFBFBD>”\<5C>ȃN<C883><4E><EFBFBD>X<EFBFBD>^<5E><>
WORD clusters; // + 2 <EFBFBD><EFBFBD><EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>^<5E><>
WORD sectors; // + 4 <EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃Z<CC83>N<EFBFBD>^<5E><>
WORD bytes; // + 6 <EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃o<CC83>C<EFBFBD>g<EFBFBD><67>
WORD freearea; // + 0 Number of available clusters
WORD clusters; // + 2 Total number of clusters
WORD sectors; // + 4 Number of sectors per cluster
WORD bytes; // + 6 Number of bytes per sector
} capacity_t;
/// ctrldrive<EFBFBD>\<5C><><EFBFBD><EFBFBD>
/// ctrldrive struct
typedef struct {
BYTE status; // +13 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE status; // +13 status
BYTE pad[3]; // padding
} ctrldrive_t;
/// DPB<EFBFBD>\<5C><><EFBFBD><EFBFBD>
/// DPB struct
typedef struct {
WORD sector_size; // + 0 1<EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD>̃o<CC83>C<EFBFBD>g<EFBFBD><67>
BYTE cluster_size; // + 2 1<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD>̃Z<CC83>N<EFBFBD>^<5E><>-1
BYTE shift; // + 3 <EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>^<5E><><EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E>̃V<CC83>t<EFBFBD>g<EFBFBD><67>
WORD fat_sector; // + 4 FAT<EFBFBD>̐擪<EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E>ԍ<EFBFBD>
BYTE fat_max; // + 6 FAT<EFBFBD>̈<EFBFBD><EFBFBD>̌<EFBFBD>
BYTE fat_size; // + 7 FAT<EFBFBD>̐<EFBFBD><EFBFBD>߂<EFBFBD><EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E><>(<28><><EFBFBD>ʕ<EFBFBD><CA95><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
WORD file_max; // + 8 <EFBFBD><EFBFBD><EFBFBD>[<5B>g<EFBFBD>f<EFBFBD>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>ɓ<EFBFBD><C993><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̌<CC8C>
WORD data_sector; // +10 <EFBFBD>f<EFBFBD>[<5B>^<5E>̈<EFBFBD><CC88>̐擪<CC90>Z<EFBFBD>N<EFBFBD>^<5E>ԍ<EFBFBD>
WORD cluster_max; // +12 <EFBFBD><EFBFBD><EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>^<5E><>+1
WORD root_sector; // +14 <EFBFBD><EFBFBD><EFBFBD>[<5B>g<EFBFBD>f<EFBFBD>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>̐擪<CC90>Z<EFBFBD>N<EFBFBD>^<5E>ԍ<EFBFBD>
// DWORD driverentry; // +16 <EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>o<EFBFBD>ւ̃|<7C>C<EFBFBD><43><EFBFBD>^ (<28><><EFBFBD>g<EFBFBD>p)
BYTE media; // +20 <EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>B<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>ʎq
// BYTE flag; // +21 DPB<EFBFBD>g<EFBFBD>p<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>O (<28><><EFBFBD>g<EFBFBD>p)
BYTE pad; // padding
WORD sector_size; // + 0 Number of bytes in one sector
BYTE cluster_size; // + 2 Number sectors in one cluster -1
BYTE shift; // + 3 Number of cluster<65><72>sector shifts
WORD fat_sector; // + 4 FAT first sector number
BYTE fat_max; // + 6 FAT storage quantity
BYTE fat_size; // + 7 FAT controlled sector number (excluding duplicates)
WORD file_max; // + 8 Number of files in the root directory
WORD data_sector; // +10 First sector number of data storage
WORD cluster_max; // +12 Total number of clusters +1
WORD root_sector; // +14 First sector number of root directory
// DWORD driverentry; // +16 Device driver pointer (unused)
BYTE media; // +20 Media identifier
// BYTE flag; // +21 Flag used by DPB (unused)
BYTE pad; // padding
} dpb_t;
/// <EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD>
/// Directory entry struct
typedef struct {
BYTE name[8]; // + 0 <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD> (PADDING 0x20)
BYTE ext[3]; // + 8 <EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>q (PADDING 0x20)
BYTE attr; // +11 <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE add[10]; // +12 <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>lj<EFBFBD> (PADDING 0x00)
WORD time; // +22 <EFBFBD>ŏI<EFBFBD>ύX<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD date; // +24 <EFBFBD>ŏI<EFBFBD>ύX<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WORD cluster; // +26 <EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>^<5E>ԍ<EFBFBD>
DWORD size; // +28 <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>T<EFBFBD>C<EFBFBD>Y
BYTE name[8]; // + 0 File name (PADDING 0x20)
BYTE ext[3]; // + 8 Extension (PADDING 0x20)
BYTE attr; // +11 File attribute
BYTE add[10]; // +12 File name addition (PADDING 0x00)
WORD time; // +22 Last change time of day
WORD date; // +24 Last change date
WORD cluster; // +26 Cluster number
DWORD size; // +28 File size
} dirent_t;
/// IOCTRL<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>^<5E><><EFBFBD>p<EFBFBD><70>
/// IOCTRL parameter union
typedef union {
BYTE buffer[8]; // <EFBFBD>o<EFBFBD>C<EFBFBD>g<EFBFBD>P<EFBFBD>ʂł̃A<EFBFBD>N<EFBFBD>Z<EFBFBD>X
DWORD param; // <EFBFBD>p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>^(<28>擪4<E693AA>o<EFBFBD>C<EFBFBD>g)
WORD media; // <EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>B<EFBFBD>A<EFBFBD>o<EFBFBD>C<EFBFBD>g(<28>擪2<E693AA>o<EFBFBD>C<EFBFBD>g)
BYTE buffer[8]; // Access in byte units
DWORD param; // Parameter (First 4 bytes)
WORD media; // Media byte (First 2 bytes)
} ioctrl_t;
/// <EFBFBD>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD><68><EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD>
/// Command line parameter struct
typedef struct {
BYTE buf[256]; // <EFBFBD>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD><68><EFBFBD>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE buf[256]; // Command line argument
} argument_t;
#endif // bridge_h

View File

@@ -3,9 +3,9 @@
* SCSI Target Emulator RaSCSI (*^..^*)
* for Raspberry Pi
*
* Powered by XM6 TypeG Technorogy.
* Powered by XM6 TypeG Technology.
* Copyright (C) 2016-2019 GIMONS
* [ <EFBFBD>z<EFBFBD>X<EFBFBD>g<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>V<EFBFBD>X<EFBFBD>e<EFBFBD><65> <20>u<EFBFBD><75><EFBFBD>b<EFBFBD>W<EFBFBD>h<EFBFBD><68><EFBFBD>C<EFBFBD>o ]
* [ Host Filesystem Bridge Driver ]
*
* Based on
* X68k Emulator Host Filesystem Driver version 0.27
@@ -20,19 +20,19 @@
.XREF _Init, _Process ;bridge.c
COMMAND EQU 2 <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD>ԍ<EFBFBD>
ERRLOW EQU 3 <EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[<EFBFBD>R<EFBFBD>[<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>r<EFBFBD>b<EFBFBD>g
ERRHIGH EQU 4 <EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[<EFBFBD>R<EFBFBD>[<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>r<EFBFBD>b<EFBFBD>g
MXUNIT EQU 13 <EFBFBD><EFBFBD><EFBFBD>j<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD>
DEVEND EQU 14 <EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>o<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X
BDEVNO EQU 22 <EFBFBD>x<EFBFBD>[<EFBFBD>X<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u<EFBFBD>ԍ<EFBFBD>
COMMAND EQU 2 Command number
ERRLOW EQU 3 Error code lower 8 bits
ERRHIGH EQU 4 Error code upper 8 bits
MXUNIT EQU 13 Number of units
DEVEND EQU 14 Driver exit address
BDEVNO EQU 22 Base drive number
DDHEADER:
DC.L -1 +$00 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>|<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>^
DC.W $2040 +$04 <EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DC.L -1 +$00 Link pointer
DC.W $2040 +$04 Device attribute
DC.L DDSTRATEGY +$06
DC.L DDENTRY_FIRST +$0A
DC.B '*EMUHOST' +$0E <EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD><EFBFBD>
DC.B '*EMUHOST' +$0E Device name
DDREQUEST:
DC.L 0
@@ -41,12 +41,12 @@ DDSTRATEGY:
MOVE.L A5,DDREQUEST
RTS
*<EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>o<EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD>
*Device driver entry
DDENTRY:
MOVE.L SP,(STACK_BUFF)
LEA (DEF_STACK),SP
MOVEM.L D1-D3/A0-A2,-(SP)
MOVEM.L DDREQUEST(PC),D0 D0.L: <EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>G<EFBFBD>X<EFBFBD>g<EFBFBD>w<EFBFBD>b<EFBFBD>_<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X
MOVEM.L DDREQUEST(PC),D0 D0.L: Request header address
MOVE.L D0,-(SP)
BSR _Process
ADDQ.L #4,SP
@@ -56,67 +56,67 @@ DDENTRY:
KEEP_HERE:
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݂̂̃f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>o<EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD>
*First time only device driver entry
DDENTRY_FIRST:
MOVEM.L D1-D3/A0-A2/A5,-(SP)
MOVEA.L DDREQUEST(PC),A5 A5.L: <EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>G<EFBFBD>X<EFBFBD>g<EFBFBD>w<EFBFBD>b<EFBFBD>_<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X
* CMPI.B #$40,COMMAND(A5) <EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><EFBFBD>Human68k<EFBFBD>ł̓`<EFBFBD>F<EFBFBD>b<EFBFBD>N<EFBFBD>s<EFBFBD>v
* BNE UNSUPPORTED <EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[: <EFBFBD><EFBFBD><EFBFBD>Ή<EFBFBD>
MOVEA.L DDREQUEST(PC),A5 A5.L: Request header address
* CMPI.B #$40,COMMAND(A5) No need to check when Human68k is running
* BNE UNSUPPORTED Error: Not supported
*<EFBFBD>^<EFBFBD>C<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>\<EFBFBD><EFBFBD>
*Show title
PEA MESSAGE_TITLE(PC)
DOS _PRINT
ADDQ.L #4,SP
*<EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD>`<EFBFBD>F<EFBFBD>b<EFBFBD>N
*Device check
DEVICE_CHECK:
BSR _Init
TST.L D0
BEQ NOTFOUND <EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[: <EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD>
BEQ NOTFOUND Error: Device not found
*<EFBFBD><EFBFBD>J<EFBFBD>n
*Resident program start
LEA DDENTRY(PC),A1
LEA DDHEADER+$0A(PC),A0
MOVE.L A1,(A0) <EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>o<EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݒ<EFBFBD>
MOVE.L #PROG_END,DEVEND(A5) <EFBFBD><EFBFBD>I<EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD>ݒ<EFBFBD>
MOVE.L A1,(A0) Configure driver entry
MOVE.L #PROG_END,DEVEND(A5) Configure resident exit address
ST.B MXUNIT(A5) <EFBFBD>|<EFBFBD>[<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̔<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD><EFBFBD>ߕ<EFBFBD><EFBFBD>̒l<EFBFBD><EFBFBD><EFBFBD>ݒ<EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD>
JSR (A1) <EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>o<EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s
ST.B MXUNIT(A5) Set negative number since port is considered unimplemented
JSR (A1) Execute driver entry
TST.B MXUNIT(A5) <EFBFBD><EFBFBD><EFBFBD>j<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>m<EFBFBD>F
BLE NODRIVE <EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[: <EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD>
TST.B MXUNIT(A5) Verify number of units
BLE NODRIVE Error: No drive
MOVE.B BDEVNO(A5),D0
MOVE.B MXUNIT(A5),D1
LEA FIRSTDRIVE(PC),A0
ADD.B D0,(A0) <EFBFBD>J<EFBFBD>n<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ADD.B D1,D0 <EFBFBD>I<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ADD.B D0,(A0) Overwrite start drive name
ADD.B D1,D0 Overwrite stop drive name
ADD.B D0,LASTDRIVE-FIRSTDRIVE(A0)
PEA MESSAGE_DRIVENAME(PC) <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>uA:
PEA MESSAGE_DRIVENAME(PC) Normal: Drive A:
DOS _PRINT
PEA MESSAGE_DRIVENAME2(PC) <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z:
PEA MESSAGE_DRIVENAME2(PC) Normal: to Z:
SUBQ.B #2,D1
BCS @F
DOS _PRINT
@@ ADDQ.L #8,SP
PEA MESSAGE_DRIVENAME3(PC) <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>^<EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD>
PEA MESSAGE_DRIVENAME3(PC) Normal: was registered
BRA QUIT
NOTFOUND:
PEA MESSAGE_NOTFOUND(PC) <EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[: <EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD>
PEA MESSAGE_NOTFOUND(PC) Error: Device not found
BRA ABORT
UNSUPPORTED:
PEA MESSAGE_UNSUPPORTED(PC) <EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[: <EFBFBD><EFBFBD><EFBFBD>Ή<EFBFBD>
PEA MESSAGE_UNSUPPORTED(PC) Error: Not supported
BRA ABORT
NODRIVE:
PEA MESSAGE_NODRIVE(PC) <EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[: <EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD>
PEA MESSAGE_NODRIVE(PC) Error: No drive
ABORT:
MOVE.B #$0D,ERRLOW(A5)
@@ -139,41 +139,41 @@ SECRET:
DATA
*<EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>Z<EFBFBD>[<EFBFBD>W
*Error messages
MESSAGE_NOTFOUND:
DC.B '<EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD>',$0D,$0A,0
DC.B 'Device not found',$0D,$0A,0
MESSAGE_UNSUPPORTED:
DC.B '<EFBFBD><EFBFBD><EFBFBD>Ή<EFBFBD>',$0D,$0A,0
DC.B 'Not supported',$0D,$0A,0
MESSAGE_NODRIVE:
DC.B '<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD>',$0D,$0A,0
DC.B 'No drive',$0D,$0A,0
*<EFBFBD>o<EFBFBD>^<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>Z<EFBFBD>[<EFBFBD>W
*Registration messages
MESSAGE_DRIVENAME:
DC.B '<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u'
DC.B 'Drive'
FIRSTDRIVE:
DC.B 'A:',0
MESSAGE_DRIVENAME2:
DC.B '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
DC.B ' to '
LASTDRIVE:
DC.B '@:',0
MESSAGE_DRIVENAME3:
DC.B '<EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>^<EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD>',$0D,$0A,0
DC.B ' was registered',$0D,$0A,0
*<EFBFBD>^<EFBFBD>C<EFBFBD>g<EFBFBD><EFBFBD>
*Title
MESSAGE_TITLE:
DC.B $0D,$0A
MESSAGE_TITLE2:
DC.B 'RaSCSI FileSystem Driver version 1.42',$0D,$0A,0
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><EFBFBD>I
*Thanks!
CREDIT:
DC.B 'Coded by GIMONS',$0D,$0A
DC.B 'Special thanks to',$0D,$0A
DC.B 9,'co',$0D,$0A
DC.B 9,'<EFBFBD>o<EFBFBD>h<EFBFBD>D',$0D,$0A
DC.B 9,'<EFBFBD><EFBFBD><EFBFBD>ԁ<EFBFBD><EFBFBD>K<EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD><EFBFBD>',$0D,$0A
DC.B 9,'PI.',$0D,$0A
DC.B 9,'Tachibana@Kuwashima Giken',$0D,$0A
DC.B 0
BSS

View File

@@ -1,29 +0,0 @@
RaSCSI <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD>h<EFBFBD><68><EFBFBD>C<EFBFBD>o
RASDRV version 1.42
<EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>v
<EFBFBD>@<40>{<7B>v<EFBFBD><76><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X68000<30><30><EFBFBD>@<40>œ<EFBFBD><C593><EFBFBD>Ă<EFBFBD><C482><EFBFBD>Human68k<38><6B><EFBFBD><EFBFBD>RaSCSI<53>̃u<CC83><75><EFBFBD>b<EFBFBD>W<EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD><58>
<20>ʂ<EFBFBD><CA82><EFBFBD>Raspberry Pi<50><69><EFBFBD>̃t<CC83>@<40>C<EFBFBD><43><EFBFBD>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD>𒼐ڑ<F092BC90><DA91><EFBFBD><EFBFBD>߂̃f<CC83>o<EFBFBD>C<EFBFBD>X<EFBFBD>h<EFBFBD><68><EFBFBD>C<EFBFBD>o<EFBFBD>ł<EFBFBD><C582>B
<EFBFBD>@X68000<30>G<EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD>[<5B>^<5E>ł<EFBFBD><C582><EFBFBD>XM6<4D>y<EFBFBD><79>XM6<4D><36><EFBFBD>Ȃ<EFBFBD><C882>т<EFBFBD>TypeG<65><47>WindrvXM<58>Ɠ<EFBFBD><C693><EFBFBD><EFBFBD>̋@<40>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>@<40><><EFBFBD>܂<EFBFBD><DC82>B
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>@<40><><EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD>Raspberry Pi<50><69>RaSCSI<53>Ńu<C583><75><EFBFBD>b<EFBFBD>W<EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD><58><EFBFBD>L<EFBFBD><4C><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
<20><EFBFBD><E182A6>SCSI ID6<44>Ƀu<C983><75><EFBFBD>b<EFBFBD>W<EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD><58><EFBFBD>L<EFBFBD><4C><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD><EFBFBD><EA8D87>rascsi -ID6 BRIDGE<47>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD>
<20>w<EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD>ł<EFBFBD><C582>B
<EFBFBD>@<40><><EFBFBD>Ƀf<C983>o<EFBFBD>C<EFBFBD>X<EFBFBD>h<EFBFBD><68><EFBFBD>C<EFBFBD>oRASCSI.SYS<59><53><EFBFBD><EFBFBD><EFBFBD>@<40>̊‹<CC8A><C28B>ɃR<C983>s<EFBFBD>[<5B><><EFBFBD>܂<EFBFBD><DC82>B<EFBFBD><42><EFBFBD>Ƃ<EFBFBD>CONFIG.SYS<59><53>
<20><EFBFBD><E394BC><EFBFBD><EFBFBD><EFBFBD>Ɉȉ<C988><C889>̂悤<CC82>ɋL<C98B>q<EFBFBD><71><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
DEVICE = \SYS\RASDRV.SYS
<EFBFBD>@<40>N<EFBFBD><4E><EFBFBD>I<EFBFBD>v<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EA8D87>Raspberry Pi<50>̃<EFBFBD><CC83>[<5B>g<EFBFBD>f<EFBFBD>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD>}<7D>E<EFBFBD><45><EFBFBD>g
<EFBFBD>@<40><><EFBFBD>܂<EFBFBD><DC82>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD>Ƀf<C983>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>Ƃł<C682><C582>̃f<CC83>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>}<7D>E<EFBFBD><45><EFBFBD>g<EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82>B
<20><EFBFBD><E182A6>/home/pi/app<70><70>/home/pi/data<74>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>f<EFBFBD>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>}<7D>E<EFBFBD><45><EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EA8D87>
DEVICE = \SYS\RASDRV.SYS /home/pi/app /home/pi/data
<20>ƋL<C68B>q<EFBFBD><71><EFBFBD><EFBFBD>Ƃœ<C682><C593>‚̃f<CC83>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>ʁX<CA81>̃h<CC83><68><EFBFBD>C<EFBFBD>u<EFBFBD>Ƃ<EFBFBD><C682>ă}<7D>E<EFBFBD><45><EFBFBD>g<EFBFBD>”\<5C>ł<EFBFBD><C582>B
<20><><EFBFBD>̑<EFBFBD><CC91>̃I<CC83>v<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD>WindrvXM<58>̂<EFBFBD><CC82>̂<EFBFBD><CC82>w<EFBFBD><77><EFBFBD>”\<5C>ł<EFBFBD><C582>B

View File

@@ -1,42 +0,0 @@
RaSCSI<EFBFBD>p Ethernet<65>h<EFBFBD><68><EFBFBD>C<EFBFBD>o
RASETHER version 1.20
Based on
Neptune-X board driver for Human-68k(ESP-X) version 0.03
Programed 1996-7 by Shi-MAD.
Special thanks to Niggle, FIRST, yamapu ...
<EFBFBD><EFBFBD> <20><><EFBFBD>̃v<CC83><76><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Shi-MAD <20><><EFBFBD><EFBFBD><EFBFBD>̍<EFBFBD><CC8D><EFBFBD><EFBFBD>ꂽ Ethernet <20>p ISA <20>o<EFBFBD>X<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>W "Neptune-X" <20>p<EFBFBD>f<EFBFBD>o
<20>C<EFBFBD>X<EFBFBD>h<EFBFBD><68><EFBFBD>C<EFBFBD>o ether_ne.sys <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ether_ne.sys ver0.03 +M01 +1 +L12<31><32>
<20>Q<EFBFBD>l<EFBFBD>ɂ<EFBFBD><C982>ĊJ<C48A><4A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RaSCSI<53>p<EFBFBD>̃C<CC83>[<5B>T<EFBFBD>[<5B>l<EFBFBD>b<EFBFBD>g<EFBFBD>ʐM<CA90>h<EFBFBD><68><EFBFBD>C<EFBFBD>o<EFBFBD>ł<EFBFBD><C582>B
<EFBFBD><EFBFBD> <20>g<EFBFBD><67><EFBFBD><EFBFBD>
<20><><EFBFBD>{<7B>I<EFBFBD>ɂ̓I<CD83><49><EFBFBD>W<EFBFBD>i<EFBFBD><69><EFBFBD>̃h<CC83><68><EFBFBD>C<EFBFBD>o<EFBFBD>Ɠ<EFBFBD><C693><EFBFBD><EFBFBD><EFBFBD>Ƀf<C983>o<EFBFBD>C<EFBFBD>X<EFBFBD>h<EFBFBD><68><EFBFBD>C<EFBFBD>o<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD>CONFIG.SYS
<20>őg<C591>ݍ<EFBFBD><DD8D><EFBFBD><EFBFBD>ʼn<EFBFBD><C589><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
<EFBFBD>@<40><><EFBFBD>j
DEVICE = \SYS\RASETHER.SYS
<EFBFBD>@<40>ȉ<EFBFBD><C889>̃I<CC83>v<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD><77><EFBFBD>”\<5C>ł<EFBFBD><C582>B
-tx [x<>͐<EFBFBD><CD90><EFBFBD>] : <20>g<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD>trap<61><70><EFBFBD>w<EFBFBD><EFBFBD>܂<EFBFBD><DC82>Bx<42>͂O<CD82><4F><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><55><EFBFBD>w<EFBFBD><77><EFBFBD>”\<5C>ł<EFBFBD><C582>B
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>w<EFBFBD><EFBFBD><E882B5>trap<61><70><EFBFBD>g<EFBFBD>p<EFBFBD><70><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD><EFBFBD>́Atrap #0<><30><EFBFBD><EFBFBD>
<20>󂢂Ă<F382A282><C482><EFBFBD><E98F8A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>T<EFBFBD><54><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><41><EFBFBD>‚<EFBFBD><C282><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>trap<61>𗘗p<F0979897><70>
<20>܂<EFBFBD><DC82>B
-n : API<50><49>trap<61><70><EFBFBD>g<EFBFBD>p<EFBFBD><70><EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>B
RASETHER<45>Ŋg<C58A><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD>v<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>͈ȉ<CD88><C889>̂Ƃ<CC82><C682><EFBFBD><EFBFBD>ł<EFBFBD><C582>B
-px [x<>͐<EFBFBD><CD90><EFBFBD>] : <20>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>M<EFBFBD>̃|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Ԋu<D48A><75><EFBFBD>w<EFBFBD><EFBFBD>܂<EFBFBD>1<EFBFBD><31><EFBFBD>f<EFBFBD>t<EFBFBD>H<EFBFBD><48><EFBFBD>g<EFBFBD>ł<EFBFBD><C582>B
1<>̏ꍇ<CC8F>͖<EFBFBD>16ms<6D><73><EFBFBD>Ƀ|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F><EFBFBD>܂<EFBFBD><DC82>B2,3<><33><EFBFBD>8<EFBFBD>܂Ŏw<C58E><EFBFBD>”\
<20>ł<EFBFBD><C582>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>‘<EFBFBD><C291><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD>16ms<6D>Ԋu<D48A><75><EFBFBD><EFBFBD><E582AB><EFBFBD>Ȃ<EFBFBD><C882>܂<EFBFBD><DC82>B
-ix [x<>͐<EFBFBD><CD90><EFBFBD>] : <20>|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Ɏg<C98E>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>݂̃^<5E>C<EFBFBD>v<EFBFBD><76><EFBFBD>w<EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
<20>f<EFBFBD>t<EFBFBD>H<EFBFBD><48><EFBFBD>g<EFBFBD><67>0<EFBFBD><30>MFP<46><50>GPIP<49><50><EFBFBD><EFBFBD><E88D9E>(V-DISP)<29>𗘗p<F0979897><70><EFBFBD>܂<EFBFBD><DC82>B
1<><31><EFBFBD>w<EFBFBD><EFBFBD><E882B7><EFBFBD><EFBFBD>Timer-A<><41><EFBFBD><EFBFBD>݂<EFBFBD><DD82>g<EFBFBD>p<EFBFBD><70><EFBFBD>܂<EFBFBD><DC82>B
<EFBFBD><EFBFBD> <20><><EFBFBD>̃h<CC83><68><EFBFBD>C<EFBFBD>o<EFBFBD>ɂ‚<C982><C282><EFBFBD>
<20>I<EFBFBD><49><EFBFBD>W<EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD>ether_ne.sys<79>y<EFBFBD>щ<EFBFBD><D189><EFBFBD><EFBFBD>ł<EFBFBD>ether_ne.sys ver0.03 +M01 +1 +L12<31><32>
<20><><EFBFBD>p<EFBFBD>K<EFBFBD><4B><EFBFBD>ɏ]<5D><><EFBFBD>܂<EFBFBD><DC82>B

View File

@@ -3,9 +3,9 @@
// SCSI Target Emulator RaSCSI (*^..^*)
// for Raspberry Pi
//
// Powered by XM6 TypeG Technorogy.
// Powered by XM6 TypeG Technology.
// Copyright (C) 2016-2017 GIMONS
// [ RaSCSI <EFBFBD>C<EFBFBD>[<5B>T<EFBFBD>[<5B>l<EFBFBD>b<EFBFBD>g <20><><EFBFBD>C<EFBFBD><43> ]
// [ RaSCSI Ethernet Main ]
//
// Based on
// Neptune-X board driver for Human-68k(ESP-X) version 0.03
@@ -25,7 +25,7 @@ int trap_no;
int num_of_prt;
struct prt PRT_LIST[NPRT];
// <EFBFBD>}<7D><><EFBFBD>`<60>L<EFBFBD><4C><EFBFBD>X<EFBFBD>g<EFBFBD>i<EFBFBD><69><EFBFBD>Ή<EFBFBD><CE89>j
// Multicast (not supported)
#ifdef MULTICAST
int num_of_multicast;
struct eaddr multicast_array[NMULTICAST];
@@ -45,7 +45,7 @@ static int sprint_eaddr(unsigned char* dst, void* e)
}
/************************************************
* TRAP n<><6E><EFBFBD>g<EFBFBD>p<EFBFBD>”\<5C><><EFBFBD><EFBFBD><EFBFBD>ׂ<EFBFBD> *
* Check if TRAP n can be used *
************************************************/
static int is_valid_trap(int trap_no)
{
@@ -55,10 +55,10 @@ static int is_valid_trap(int trap_no)
return 0;
}
// <EFBFBD>g<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>`<60>F<EFBFBD>b<EFBFBD>N
// Check if in use
addr = (unsigned int)_dos_intvcg(TRAP_VECNO(trap_no));
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>̍ŏ<EFBFBD><EFBFBD>ʃo<EFBFBD>C<EFBFBD>g<EFBFBD>Ƀx<EFBFBD>N<EFBFBD>^<5E>ԍ<EFBFBD><D48D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>Ζ<EFBFBD><CE96>g<EFBFBD>p
// Unused if the uppermost byte of the process address contains the vector number
if (addr & 0xff000000) {
return -1;
}
@@ -67,13 +67,13 @@ static int is_valid_trap(int trap_no)
}
/************************************************
* <09><><EFBFBD>g<EFBFBD>p<EFBFBD><70>TRAP n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
* Search for unused TRAP n *
************************************************/
static int search_trap_no(int def)
{
int i;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>def<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>p<EFBFBD>”\<5C>Ȃ炻<C882><E782BB><EFBFBD>Ɍ<EFBFBD><C98C><EFBFBD>
// If def is usable, choose that
if (is_valid_trap(def)) {
return def;
}
@@ -96,8 +96,8 @@ static void* trap_vector(int trap_no, void *func)
}
/************************************************
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֐<EFBFBD><D690>ine.s<>C<EFBFBD>j<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>Y<EFBFBD>ŌĂт܂<D182><DC82>j *
************************************************/
* Init Function (call with ne.s initialize) *
************************************************/
int Initialize(void)
{
unsigned char buff[128];
@@ -106,27 +106,27 @@ int Initialize(void)
if (SearchRaSCSI())
{
Print("RaSCSI Ether Adapter <20>̑<EFBFBD><CC91>݂<EFBFBD><DD82>m<EFBFBD>F<EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD>\r\n");
Print("Could not locate the RaSCSI Ethernet Adapter\r\n");
return -1;
}
if (InitList(NPRT)
|| InitRaSCSI())
{
Print("RaSCSI Ether Adapter Driver <20>̏<EFBFBD><CC8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ɏ<EFBFBD><C98E>s<EFBFBD><73><EFBFBD>܂<EFBFBD><DC82><EFBFBD>\r\n");
Print("Failed to initialize the RaSCSI Ethernet Adapter Driver\r\n");
return -1;
}
memset(&ether_addr, 0x00, sizeof(ether_addr));
GetMacAddr(&ether_addr);
// <EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>ptrap<EFBFBD>ԍ<EFBFBD><EFBFBD>𒲂ׂ<EFBFBD><EFBFBD>i<EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>ԍ<EFBFBD><EFBFBD>D<EFBFBD><EFBFBD><EFBFBD>j
// Inspect unused trap number (prioritize specified number)
if (trap_no >= 0) {
trap_no = search_trap_no(trap_no);
}
if (trap_no >= 0) {
// trap<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Hook the trap
trap_vector(trap_no, (void*)trap_entry);
sprintf(buff, " API trap number:%d ", trap_no);
} else {
@@ -141,14 +141,14 @@ int Initialize(void)
sprintf(buff, "MAC Addr:%s\r\n", buff2);
Print(buff);
// <EFBFBD>|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>J<EFBFBD>n
// Start polling
RegisterIntProcess(poll_interval);
return 0;
}
/************************************************
* <EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>R<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
* Initialize Protocol List *
************************************************/
int InitList(int n)
{
@@ -171,7 +171,7 @@ int InitList(int n)
}
/************************************************
* <EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>R<EFBFBD><EFBFBD><EFBFBD>j<EFBFBD>lj<EFBFBD> *
* Add Receive Handler (protocol) *
************************************************/
int AddList(int type, int_handler handler)
{
@@ -184,7 +184,7 @@ int AddList(int type, int_handler handler)
result = -1;
// overwrite if alreay exist
// overwrite if already exist
p = &PRT_LIST[0];
for (i = 0; i < NPRT; i++, p++) {
if ((p->type == type && p->malloc != (malloc_func)-1)
@@ -214,7 +214,7 @@ int AddList(int type, int_handler handler)
}
/************************************************
* <EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>R<EFBFBD><EFBFBD><EFBFBD>j<EFBFBD> *
* Delete Receive Handler (protocol) *
************************************************/
int DeleteList(int type)
{
@@ -238,7 +238,7 @@ int DeleteList(int type)
}
/************************************************
* <EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>R<EFBFBD><EFBFBD><EFBFBD>j<EFBFBD>T<EFBFBD>[<5B>` *
* Search Receive Handler (protocol) *
************************************************/
int_handler SearchList(int type)
{
@@ -260,7 +260,7 @@ int_handler SearchList(int type)
/************************************************
* <EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>R<EFBFBD><EFBFBD><EFBFBD>j<EFBFBD>T<EFBFBD>[<5B>` *
* Search Receive Handler (protocol) *
************************************************/
int_handler SearchList2(int type, int n)
{

View File

@@ -3,9 +3,9 @@
// SCSI Target Emulator RaSCSI (*^..^*)
// for Raspberry Pi
//
// Powered by XM6 TypeG Technorogy.
// Powered by XM6 TypeG Technology.
// Copyright (C) 2016-2017 GIMONS
// [ RaSCSI <EFBFBD>C<EFBFBD>[<5B>T<EFBFBD>[<5B>l<EFBFBD>b<EFBFBD>g <20><><EFBFBD>C<EFBFBD><43> ]
// [ RaSCSI Ethernet Main ]
//
// Based on
// Neptune-X board driver for Human-68k(ESP-X) version 0.03
@@ -25,7 +25,7 @@
// number of multicast address we can handle **EDIT this**
#define NMULTICAST (64)
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>܂<EFBFBD><EFBFBD>}<7D><><EFBFBD>`<60>L<EFBFBD><4C><EFBFBD>X<EFBFBD>g<EFBFBD>ɂ͑Ή<CD91><CE89><EFBFBD><EFBFBD>Ă<EFBFBD><C482>Ȃ<EFBFBD> */
/* However, multicast is not yet supported */
struct eaddr {
unsigned char eaddr [6];
@@ -41,7 +41,7 @@ struct prt {
};
// <EFBFBD>O<EFBFBD><EFBFBD><EFBFBD>[<5B>o<EFBFBD><6F><EFBFBD>ϐ<EFBFBD>
// Global variables
extern unsigned int scsiid;
extern int trap_no;
extern int num_of_prt;
@@ -53,7 +53,7 @@ extern struct eaddr multicast_array [NMULTICAST];
#endif
// <EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>^<5E>C<EFBFBD>v<EFBFBD>
// Prototype declarations
extern int Initialize (void);
extern int InitList (int);
extern int AddList (int, int_handler);
@@ -69,7 +69,7 @@ extern void MakeMulticastTable (unsigned char*);
#endif
// ne.s <20><><EFBFBD>֐<EFBFBD>
// Function within ne.s
extern void trap_entry (void);

View File

@@ -3,9 +3,9 @@
** SCSI Target Emulator RaSCSI (*^..^*)
** for Raspberry Pi
**
** Powered by XM6 TypeG Technorogy.
** Powered by XM6 TypeG Technology.
** Copyright (C) 2016-2017 GIMONS
** [ RaSCSI <EFBFBD>C<EFBFBD>[<EFBFBD>T<EFBFBD>[<EFBFBD>l<EFBFBD>b<EFBFBD>g <EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>o ]
** [ RaSCSI Ethernet Driver ]
**
** Based on
** Neptune-X board driver for Human-68k(ESP-X) version 0.03
@@ -23,21 +23,21 @@
* Global Symbols ---------------------- *
*
* <EFBFBD>b<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p <EFBFBD>O<EFBFBD><EFBFBD><EFBFBD>
* For C language: external declarations
*
.xref _Initialize, _AddList, _SearchList, _DeleteList ;main.c
.xref _GetMacAddr, _SetMacAddr ;scsictl.c
.xref _SendPacket, _SetPacketReception ;scsictl.c
* .xref _AddMulticastAddr, _DelMulticastAddr ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* .xref _AddMulticastAddr, _DelMulticastAddr ;not implemented
*
* <EFBFBD>b<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p <EFBFBD>O<EFBFBD><EFBFBD><EFBFBD>ϐ<EFBFBD>
* For C language: external functions
*
.xref _num_of_prt ;main.c <EFBFBD>o<EFBFBD>^<5E>v<EFBFBD><76><EFBFBD>g<EFBFBD>R<EFBFBD><52><EFBFBD><EFBFBD>
.xref _trap_no ;<EFBFBD>g<EFBFBD>ptrap<EFBFBD>i<EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>[
.xref _trans_counter ;scsictl.c <EFBFBD><EFBFBD><EFBFBD>M/<2F><><EFBFBD>M<EFBFBD>o<EFBFBD>C<EFBFBD>g<EFBFBD><67>
.xref _intr_type ;scsictl.c <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݎ<EFBFBD><EFBFBD><EFBFBD>
.xref _poll_interval ;scsictl.c <EFBFBD>|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Ԋu
.xref _num_of_prt ;main.c Number of registered protocols
.xref _trap_no ;Used trap number
.xref _trans_counter ;scsictl.c Number of send/receive bytes
.xref _intr_type ;scsictl.c Type of interrupt
.xref _poll_interval ;scsictl.c Polling interval
* Text Section -------------------------------- *
@@ -47,21 +47,21 @@
*
* <EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD>w<EFBFBD>b<EFBFBD>_<EFBFBD>[
* Device Header
*
device_header:
.dc.l -1 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>|<7C>C<EFBFBD><43><EFBFBD>^<5E>[
.dc.l -1 ;link pointer
.dc $8000 ;device att.
.dc.l strategy_entry ;stategy entry
.dc.l interupt_entry ;interupt entry
.dc.l strategy_entry ;strategy entry
.dc.l interupt_entry ;interrupt entry
.dc.b '/dev/en0' ;device name
.dc.b 'EthD' ;for etherlib.a
.dc.b 'RASC' ;driver name (<EFBFBD><EFBFBD><EFBFBD>̌<EFBFBD><EFBFBD>ɃG<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD>u<EFBFBD><75>)
.dc.b 'RASC' ;driver name (put in entry later)
* 'RASC' <EFBFBD><EFBFBD><EFBFBD><EFBFBD> superjsr_entry <EFBFBD>̊Ԃɂ͉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Don not put anything between 'RASC' and superjsr_entry
*
* <EFBFBD>C<EFBFBD>[<EFBFBD>T<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>o <EFBFBD>֐<EFBFBD> <EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>[ ( for DOS _SUPERJSR )
* Ether Driver Function Entry ( for DOS _SUPERJSR )
* in: d0: command number
* a0: args
*
@@ -79,11 +79,11 @@ superjsr_entry:
bsr do_command
movem.l (sp)+,d1-d7/a1-a7
rts ;<EFBFBD><EFBFBD><EFBFBD>ʂ̃<EFBFBD><EFBFBD>^<5E>[<5B><>
rts ;normal return
*
* <EFBFBD>C<EFBFBD>[<EFBFBD>T<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>o <EFBFBD>֐<EFBFBD> <EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>[ ( for trap #n )
* Ether Driver Function Entry ( for trap #n )
* in: d0: command number
* a0: args
*
@@ -101,51 +101,51 @@ _trap_entry::
bsr do_command
movem.l (sp)+,d1-d7/a1-a7
rte ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>݃<EFBFBD><EFBFBD>^<5E>[<5B><>
rte ;interrupt return
*
* <EFBFBD>e<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӂ<EFBFBD><EFBFBD>
* Assign each command
*
do_command:
moveq #FUNC_MIN,d1
cmp.l d0,d1
bgt error ;d0<-2 <EFBFBD>Ȃ疢<EFBFBD>Ή<EFBFBD><EFBFBD>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD>ԍ<EFBFBD>
bgt error ;d0<-2 is an unsupported command number
moveq #FUNC_MAX,d1
cmp.l d1,d0
bgt error ;9<d0 <EFBFBD>Ȃ疢<EFBFBD>Ή<EFBFBD><EFBFBD>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD>ԍ<EFBFBD>
bgt error ;9<d0 is an unsupported command number
add d0,d0
move (jumptable,pc,d0.w),d0
jmp (jumptable,pc,d0.w) ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> a0 <20><><EFBFBD><EFBFBD><EFBFBD>W<EFBFBD>X<EFBFBD>^<5E>n<EFBFBD><6E>
jmp (jumptable,pc,d0.w) ;Pass parameter a0 to register
** rts
error:
moveq #-1,d0
rts
*
* <EFBFBD>W<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD>e<EFBFBD>[<EFBFBD>u<EFBFBD><EFBFBD>
* Jump Table
*
FUNC_MIN: .equ ($-jumptable)/2
.dc get_cnt_addr-jumptable ;-2 ... <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>J<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>^<5E>̃A<CC83>h<EFBFBD><68><EFBFBD>X<EFBFBD>
.dc driver_entry-jumptable ;-1 ... <EFBFBD>g<EFBFBD>ptrap<EFBFBD>ԍ<EFBFBD><EFBFBD>̎擾
.dc get_cnt_addr-jumptable ;-2 ... Get transfer counter address
.dc driver_entry-jumptable ;-1 ... Get used trap number
jumptable:
.dc get_driver_version-jumptable ;00 ... <EFBFBD>o<EFBFBD>[<EFBFBD>W<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̎
.dc get_mac_addr-jumptable ;01 ... <EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD>MAC<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>
.dc get_prom_addr-jumptable ;02 ... PROM<EFBFBD>ɏ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꂽMAC<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>
.dc set_mac_addr-jumptable ;03 ... MAC<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>̐ݒ<EFBFBD>
.dc send_packet-jumptable ;04 ... <EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>M
.dc set_int_addr-jumptable ;05 ... <EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>ݒ<EFBFBD>
.dc get_int_addr-jumptable ;06 ... <EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>̃A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>
.dc del_int_addr-jumptable ;07 ... <EFBFBD>n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>
.dc set_multicast_addr-jumptable ;08 ... (<EFBFBD>}<7D><><EFBFBD>`<60>L<EFBFBD><4C><EFBFBD>X<EFBFBD>g<EFBFBD>̐ݒ聃<DD92><E88183><EFBFBD>Ή<EFBFBD><CE89><EFBFBD>)
.dc get_statistics-jumptable ;09 ... (<EFBFBD><EFBFBD><EFBFBD>v<EFBFBD>ǂݏo<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ή<EFBFBD><EFBFBD><EFBFBD>)
.dc get_driver_version-jumptable ;00 ... Get version
.dc get_mac_addr-jumptable ;01 ... Get current MAC address
.dc get_prom_addr-jumptable ;02 ... Get MAC address written in PROM
.dc set_mac_addr-jumptable ;03 ... Set MAC address
.dc send_packet-jumptable ;04 ... Send packet
.dc set_int_addr-jumptable ;05 ... Set packet receive handler
.dc get_int_addr-jumptable ;06 ... Get packet receive handler address
.dc del_int_addr-jumptable ;07 ... Delete handler
.dc set_multicast_addr-jumptable ;08 ... (Set multicast <unsupported>)
.dc get_statistics-jumptable ;09 ... (Read out statistics <unsupported>)
FUNC_MAX: .equ ($-jumptable)/2-1
*
* <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h -2: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>J<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>^<EFBFBD>̃A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD>Ԃ<EFBFBD>
* Command -2: Return transfer counter address
* return: address
*
get_cnt_addr:
@@ -155,7 +155,7 @@ get_cnt_addr:
*
* <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h -1: <EFBFBD>g<EFBFBD>ptrap<EFBFBD>ԍ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԃ<EFBFBD>
* Command -1: Return used trap number
* return: trap number to use (-1:use SUPERJSR)
*
driver_entry:
@@ -166,13 +166,13 @@ driver_entry:
*mesff: .dc.b 'DriverEntry',13,10,0
* .text
move.l (_trap_no,pc),d0 ;trap_no ... main.c <EFBFBD>ϐ<EFBFBD>
move.l (_trap_no,pc),d0 ;trap_no ... main.c variable
rts
*
* <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h 00: <EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>o<EFBFBD>[<EFBFBD>̃o<EFBFBD>[<EFBFBD>W<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԃ<EFBFBD>
* return: version number (<EFBFBD><EFBFBD>... ver1.00 <EFBFBD>Ȃ<EFBFBD> 100 <EFBFBD><EFBFBD><EFBFBD>Ԃ<EFBFBD>)
* Command 00: Return driver version
* return: version number (Ex... for ver1.00 return 100)
*
get_driver_version:
* pea (mes00,pc)
@@ -187,7 +187,7 @@ get_driver_version:
*
* <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h 01: <EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD> MAC <EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>̎
* Command 01: Get current MAC address
* return: same as *dst
*
get_mac_addr:
@@ -200,13 +200,13 @@ get_mac_addr:
pea (a0)
pea (a0)
bsr _GetMacAddr ;scsictl.c <EFBFBD>֐<EFBFBD>
bsr _GetMacAddr ;scsictl.c function
addq.l #4,sp
move.l (sp)+,d0 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a0 <20><> d0 <20>ɂ<EFBFBD><C982>̂܂ܕԂ<DC95>
move.l (sp)+,d0 ;Return d0 for parameter a0
rts
*
* <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h 02: EEPROM <EFBFBD>ɏ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> MAC <EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>̎
* Command 02: Get MAC address written to EEPROM
* return: same as *dst
*
get_prom_addr:
@@ -219,13 +219,13 @@ get_prom_addr:
pea (a0)
pea (a0)
bsr _GetMacAddr ;scsictl.c <EFBFBD>֐<EFBFBD>
bsr _GetMacAddr ;scsictl.c function
addq.l #4,sp
move.l (sp)+,d0 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a0 <20><> d0 <20>ɂ<EFBFBD><C982>̂܂ܕԂ<DC95>
move.l (sp)+,d0 ;Return d0 for parameter a0
rts
*
* <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h 03: MAC<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>̐ݒ<EFBFBD>
* Command 03: Set MAC address
* return: 0 (if no errors)
*
set_mac_addr:
@@ -237,13 +237,13 @@ set_mac_addr:
* .text
pea (a0)
bsr _SetMacAddr ;scsictl.c <EFBFBD>֐<EFBFBD>
bsr _SetMacAddr ;scsictl.c function
addq.l #4,sp
rts
*
* <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h 04: <EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>M
* Command 04: Send packet
* packet contents:
* Distination MAC: 6 bytes
* Source(own) MAC: 6 bytes
@@ -256,10 +256,10 @@ send_packet:
* DOS _PRINT
* addq.l #4,sp
move.l (a0)+,d0 ;<EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD>T<EFBFBD>C<EFBFBD>Y
move.l (a0),-(sp) ;<EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X
move.l (a0)+,d0 ;packet size
move.l (a0),-(sp) ;packet address
move.l d0,-(sp)
bsr _SendPacket ;scsictl.c <EFBFBD>֐<EFBFBD>
bsr _SendPacket ;scsictl.c function
addq.l #8,sp
* move.l d0,-(sp)
@@ -269,14 +269,14 @@ send_packet:
* move.l (sp)+,d0
* .data
*mes04: .dc.b 13,10,'SendPacket,13,10',0
*mes04e:.dc.b 13,10,'SendPacket<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',13,10,0
*mes04e:.dc.b 13,10,'SendPacket finished',13,10,0
* .text
rts
*
* <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h 05: <EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD><EFBFBD>݃n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>lj<EFBFBD><EFBFBD>E<EFBFBD>ݒ<EFBFBD>
* Command 05: Set / add receive interrupt handler
* type: 0x00000800 IP packet
* 0x00000806 ARP packet
* return: 0 (if no errors)
@@ -289,28 +289,28 @@ set_int_addr:
*mes05: .dc.b 'SetIntAddr',13,10,0
* .text
move.l (a0)+,d0 ;<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>R<EFBFBD><EFBFBD><EFBFBD>ԍ<EFBFBD>
move.l (a0),-(sp) ;<EFBFBD>n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>֐<EFBFBD><EFBFBD>̃A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X
move.l (a0)+,d0 ;protocol number
move.l (a0),-(sp) ;address to handler function
move.l d0,-(sp)
bsr _AddList ;main.c <EFBFBD>֐<EFBFBD>
bsr _AddList ;main.c function
addq.l #8,sp
tst.l d0
bmi set_int_addr_rts ;<EFBFBD>o<EFBFBD>^<5E><><EFBFBD>s
bmi set_int_addr_rts ;Registration failed
cmpi.l #1,(_num_of_prt) ;<EFBFBD>n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P<EFBFBD>Ȃ犄<EFBFBD><EFBFBD>݋<EFBFBD><EFBFBD>‚<EFBFBD>
cmpi.l #1,(_num_of_prt) ;Permit interrupt if number of handlers is 1
bne set_int_addr_rts
pea (1) ;1=<<EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
bsr _SetPacketReception ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>݋<EFBFBD><EFBFBD><EFBFBD> ... scsictl.c
pea (1) ;1=<Permit>
bsr _SetPacketReception ;interrupt permitted ... scsictl.c
addq.l #4,sp
* moveq #0,d0 ;SetPacketReception() <EFBFBD>ŏ<EFBFBD><EFBFBD><EFBFBD> 0 <20><><EFBFBD>Ԃ<EFBFBD><D482>̂ŏȗ<C58F>
* moveq #0,d0 ;SetPacketReception() always returns 0 so bypass
set_int_addr_rts:
rts
*
* <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h 06: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>݃n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>̃A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>
* Command 06: Get interrupt handler and address
* return: interupt address
*
get_int_addr:
@@ -328,7 +328,7 @@ get_int_addr:
*
* <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h 07: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>݃n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>̍
* Command 07: Delete interrupt handler
* return: 0 (if no errors)
*
del_int_addr:
@@ -340,24 +340,24 @@ del_int_addr:
* .text
pea (a0)
bsr _DeleteList ;main.c <EFBFBD>֐<EFBFBD>
bsr _DeleteList ;main.c function
move.l d0,(sp)+
bmi del_int_addr_ret ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>s
bmi del_int_addr_ret ;Delete failed
tst.l (_num_of_prt) ;<EFBFBD>n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>Ί<EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><EFBFBD>֎~<7E><><EFBFBD><EFBFBD>
tst.l (_num_of_prt) ;Forbid interrupts if handlers are gone
bne del_int_addr_ret
clr.l -(sp) ;0=<<EFBFBD>֎~>
bsr _SetPacketReception ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>݋֎~ ... scsictl.c
clr.l -(sp) ;0=<Block>
bsr _SetPacketReception ;Interrupt forbitten ... scsictl.c
addq.l #4,sp
* moveq #0,d0 ;SetPacketReception() <EFBFBD>ŏ<EFBFBD><EFBFBD><EFBFBD> 0 <20><><EFBFBD>Ԃ<EFBFBD><D482>̂ŏȗ<C58F>
* moveq #0,d0 ;SetPacketReception() always returns 0 so bypass
del_int_addr_ret:
rts
*
* <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h 08: <EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>`<EFBFBD>L<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>̐ݒ<EFBFBD>
* Command 08: Set multicast address
*
set_multicast_addr:
* pea (mes08,pc)
@@ -372,7 +372,7 @@ set_multicast_addr:
*
* <EFBFBD>R<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>h 09: <EFBFBD><EFBFBD><EFBFBD>v<EFBFBD>ǂݏo<EFBFBD><EFBFBD>
* Command 09: Read out statistics
*
get_statistics:
* pea (mes09,pc)
@@ -386,7 +386,7 @@ get_statistics:
rts
*
* <EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>o<EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>[
* Device Driver Entry
*
strategy_entry:
move.l a5,(request_buffer)
@@ -394,7 +394,7 @@ strategy_entry:
interupt_entry:
move.l sp,(stack_buff) ;<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>̃X<EFBFBD>^<5E>b<EFBFBD>N<EFBFBD>G<EFBFBD><47><EFBFBD>A<EFBFBD><41><EFBFBD>g<EFBFBD><67>
move.l sp,(stack_buff) ;Use own stack area
lea (def_stack),sp ;
movem.l d1-d7/a0-a5,-(sp)
@@ -481,13 +481,13 @@ opt_i:
bra opt_loop
arg_end:
bsr _Initialize ;main.c <EFBFBD>֐<EFBFBD>
;I/O<>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD>ݒ<EFBFBD>
;MAC<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>
;<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>R<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;SCSICTL<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>݃n<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>x<EFBFBD>N<EFBFBD>^<5E>ݒ<EFBFBD><DD92>j
;trap<EFBFBD>T<EFBFBD>[<5B>r<EFBFBD>X<EFBFBD>i<EFBFBD>x<EFBFBD>N<EFBFBD>^<5E>ݒ<EFBFBD><DD92>j
bsr _Initialize ;main.c function
;Set I/O address
;Get MAC address
;Init protocol list
;Init SCSICTL
;Interrupt handler (set vector)
;trap service (set vector)
tst.l d0
bne errorret
@@ -508,7 +508,7 @@ intret:
move.b d0,(3,a5)
movem.l (sp)+,d1-d7/a0-a5
movea.l (stack_buff,pc),sp ;<EFBFBD>X<EFBFBD>^<5E>b<EFBFBD>N<EFBFBD>|<7C>C<EFBFBD><43><EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982>ǂ<EFBFBD>
movea.l (stack_buff,pc),sp ;Restore stack pointer
rts
get_num:
@@ -539,7 +539,7 @@ mestitle:
.dc.b 'RaSCSI Ethernet Driver version 1.20 / Based on ether_ne.sys+M01L12',13,10
.dc.b 0
mesparam_err:
.dc.b '<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<EFBFBD>^<EFBFBD><EFBFBD><EFBFBD>ُ<EFBFBD><EFBFBD>ł<EFBFBD>',13,10,0
.dc.b 'Invalid parameter',13,10,0
.even
@@ -562,7 +562,7 @@ stack_buff_i:
.quad
*
* <EFBFBD>X<EFBFBD>^<EFBFBD>b<EFBFBD>N<EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>A
* Stack area
*
.ds.b 1024*8
def_stack:

View File

@@ -3,9 +3,9 @@
// SCSI Target Emulator RaSCSI (*^..^*)
// for Raspberry Pi
//
// Powered by XM6 TypeG Technorogy.
// Powered by XM6 TypeG Technology.
// Copyright (C) 2016-2017 GIMONS
// [ RaSCSI <EFBFBD>C<EFBFBD>[<5B>T<EFBFBD>[<5B>l<EFBFBD>b<EFBFBD>g SCSI<53><49><EFBFBD> ]
// [ RaSCSI Ethernet SCSI Control Department ]
//
// Based on
// Neptune-X board driver for Human-68k(ESP-X) version 0.03
@@ -47,24 +47,24 @@ typedef struct
#define MFP_IERB 0xe88009
#define MFP_IMRB 0xe88015
// asmsub.s <20><><EFBFBD>̃T<CC83>u<EFBFBD><75><EFBFBD>[<5B>`<60><>
// Subroutine in asmsub.s
extern void DI();
extern void EI();
volatile short* iocsexec = (short*)0xa0e; // IOCS<EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>N
struct trans_counter trans_counter; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>J<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>^
unsigned char rx_buff[2048]; // <EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@
int imr; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>݋<EFBFBD><EFBFBD>ƒt<EFBFBD><EFBFBD><EFBFBD>O
int scsistop; // SCSI<EFBFBD><EFBFBD><EFBFBD>~<7E><><EFBFBD>t<EFBFBD><74><EFBFBD>O
int intr_type; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݎ<EFBFBD><EFBFBD><EFBFBD>(0:V-DISP 1:TimerA)
int poll_interval; // <EFBFBD>|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Ԋu(<28>ݒ<EFBFBD>)
int poll_current; // <EFBFBD>|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Ԋu(<28><><EFBFBD><EFBFBD>)
int idle; // <EFBFBD>A<EFBFBD>C<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>^
volatile short* iocsexec = (short*)0xa0e; // Work when executin IOCS
struct trans_counter trans_counter; // Transfer counter
unsigned char rx_buff[2048]; // Receive buffer
int imr; // Interrupt permission flag
int scsistop; // SCSI stopped flag
int intr_type; // Interrupt type (0:V-DISP 1:TimerA)
int poll_interval; // Polling interval (configure)
int poll_current; // Polling interval (current)
int idle; // Idle counter
#define POLLING_SLEEP 255 // 4-5s
/************************************************
* MAC<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߔ<EFBFBD><EFBFBD>s *
* Execute command to get MAC address *
************************************************/
int SCSI_GETMACADDR(unsigned char *mac)
{
@@ -105,7 +105,7 @@ int SCSI_GETMACADDR(unsigned char *mac)
}
/************************************************
* MAC<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>ݒ薽<EFBFBD>ߔ<EFBFBD><EFBFBD>s *
* Execute command to configure MAC address *
************************************************/
int SCSI_SETMACADDR(const unsigned char *mac)
{
@@ -144,7 +144,7 @@ int SCSI_SETMACADDR(const unsigned char *mac)
}
/************************************************
* <EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߔ<EFBFBD><EFBFBD>s *
* Execute command to get received packet size*
************************************************/
int SCSI_GETPACKETLEN(int *len)
{
@@ -188,7 +188,7 @@ int SCSI_GETPACKETLEN(int *len)
}
/************************************************
* <EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD>ߔ<EFBFBD><EFBFBD>s *
* Execute receive packet command *
************************************************/
int SCSI_GETPACKETBUF(unsigned char *buf, int len)
{
@@ -229,7 +229,7 @@ int SCSI_GETPACKETBUF(unsigned char *buf, int len)
}
/************************************************
* <EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD>ߔ<EFBFBD><EFBFBD>s *
* Execute packet send command *
************************************************/
int SCSI_SENDPACKET(const unsigned char *buf, int len)
{
@@ -267,7 +267,7 @@ int SCSI_SENDPACKET(const unsigned char *buf, int len)
}
/************************************************
* MAC<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD> *
* Get MAC address *
************************************************/
int GetMacAddr(struct eaddr* buf)
{
@@ -279,7 +279,7 @@ int GetMacAddr(struct eaddr* buf)
}
/************************************************
* MAC<EFBFBD>A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>ݒ<EFBFBD> *
* Set MAC address *
************************************************/
int SetMacAddr(const struct eaddr* data)
{
@@ -291,7 +291,7 @@ int SetMacAddr(const struct eaddr* data)
}
/************************************************
* RaSCSI<EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
* Search RaSCSI *
************************************************/
int SearchRaSCSI()
{
@@ -299,7 +299,7 @@ int SearchRaSCSI()
INQUIRYOPT_T inq;
for (i = 0; i <= 7; i++) {
// BRIDGE<EFBFBD>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Search for BRIDGE device
if (S_INQUIRY(sizeof(INQUIRY_T) , i, (struct INQUIRY*)&inq) < 0) {
continue;
}
@@ -308,7 +308,7 @@ int SearchRaSCSI()
continue;
}
// TAP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԃ<EFBFBD><EFBFBD>
// Get TAP initialization status
if (S_INQUIRY(sizeof(INQUIRYOPT_T) , i, (struct INQUIRY*)&inq) < 0) {
continue;
}
@@ -317,7 +317,7 @@ int SearchRaSCSI()
continue;
}
// SCSI ID<EFBFBD>m<EFBFBD><EFBFBD>
// Configure SCSI ID
scsiid = i;
return 0;
}
@@ -326,7 +326,7 @@ int SearchRaSCSI()
}
/************************************************
* RaSCSI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>֐<EFBFBD> *
* Init RaSCSI method *
************************************************/
int InitRaSCSI(void)
{
@@ -343,7 +343,7 @@ int InitRaSCSI(void)
}
/************************************************
* RaSCSI <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݏ<EFBFBD><EFBFBD><EFBFBD> <20>֐<EFBFBD>(<28>|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O) *
* RaSCSI interrupt handler function (polling) *
************************************************/
void interrupt IntProcess(void)
{
@@ -353,78 +353,78 @@ void interrupt IntProcess(void)
int_handler func;
int i;
// V-DISP GPIP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>݂̓A<EFBFBD>C<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>^<5E>Ő<EFBFBD><C590><EFBFBD>
// V-DISP GPIP interrupt idle count control
if (intr_type == 0) {
// <EFBFBD>A<EFBFBD>C<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z
// Increment idle
idle++;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>ɓ<EFBFBD><C993>B<EFBFBD><42><EFBFBD>Ă<EFBFBD><C482>Ȃ<EFBFBD><C882>Ȃ<EFBFBD><C882>X<EFBFBD>L<EFBFBD>b<EFBFBD>v
// Skip if not yet next scheduled processing
if (idle < poll_current) {
return;
}
// <EFBFBD>A<EFBFBD>C<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>^<5E><><EFBFBD>N<EFBFBD><4E><EFBFBD>A
// Clear idle counter
idle = 0;
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>݊J<EFBFBD>n
// Start interrupt
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>݋<EFBFBD><EFBFBD>‚̎<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Only when interrupt is permitted
if (imr == 0) {
return;
}
// IOCS<EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>΃X<EFBFBD>L<EFBFBD>b<EFBFBD>v
// Skip if executing IOCS
if (*iocsexec != -1) {
return;
}
// <EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͊<EFBFBD><EFBFBD><EFBFBD>݋֎~
// Interrupt forbidden if receiving data
DI ();
// <EFBFBD>o<EFBFBD>X<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>[<5B>̎<EFBFBD><CC8E><EFBFBD><EFBFBD><EFBFBD>
// Only in bus free phase
phase = S_PHASE();
if (phase != 0) {
// <EFBFBD>I<EFBFBD><EFBFBD>
// Exit
goto ei_exit;
}
// <EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Receive data
if (SCSI_GETPACKETLEN(&len) == 0) {
// RaSCSI<EFBFBD><EFBFBD><EFBFBD>~<7E><>
// RaSCSI is stopped
scsistop = 1;
// <EFBFBD>|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Ԋu<D48A>̍Đݒ<C490>(<28>Q<EFBFBD><51>)
// Reset polling interval (sleep)
UpdateIntProcess(POLLING_SLEEP);
// <EFBFBD>I<EFBFBD><EFBFBD>
// Exit
goto ei_exit;
}
// RaSCSI<EFBFBD>͓<EFBFBD><EFBFBD>
// RaSCSI is stopped
if (scsistop) {
scsistop = 0;
// <EFBFBD>|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Ԋu<D48A>̍Đݒ<C490>(<28>}<7D><>)
// Reset polling interval (hurry)
UpdateIntProcess(poll_interval);
}
// <EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD>͓<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĂȂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Packets did not arrive
if (len == 0) {
// <EFBFBD>I<EFBFBD><EFBFBD>
// Exit
goto ei_exit;
}
// <EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>փp<D683>P<EFBFBD>b<EFBFBD>g<EFBFBD>]<5D><>
// Tranfer packets to receive buffer memory
if (SCSI_GETPACKETBUF(rx_buff, len) == 0) {
// <EFBFBD><EFBFBD><EFBFBD>s
// Fail
goto ei_exit;
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>݋<EFBFBD><EFBFBD><EFBFBD>
// Interrupt permitted
EI ();
// <EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD>^<5E>C<EFBFBD>v<EFBFBD>Ńf<C583>[<5B>^<5E><><EFBFBD><EFBFBD>
// Split data by packet type
type = rx_buff[12] * 256 + rx_buff[13];
i = 0;
while ((func = SearchList2(type, i))) {
@@ -435,12 +435,12 @@ void interrupt IntProcess(void)
return;
ei_exit:
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>݋<EFBFBD><EFBFBD><EFBFBD>
// Interrupt permitted
EI ();
}
/************************************************
* RaSCSI <EFBFBD>p<EFBFBD>P<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>M <20>֐<EFBFBD> (ne.s<><73><EFBFBD><EFBFBD>) *
* RaSCSI Send Packets Function (from ne.s) *
************************************************/
int SendPacket(int len, const unsigned char* data)
{
@@ -449,35 +449,35 @@ int SendPacket(int len, const unsigned char* data)
}
if (len > 1514) { // 6 + 6 + 2 + 1500
return -1; // <EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>[
return -1; // Error
}
// RaSCSI<EFBFBD><EFBFBD><EFBFBD>~<7E><><EFBFBD>̂悤<CC82>Ȃ<EFBFBD><C882>G<EFBFBD><47><EFBFBD>[
// If RaSCSI seems to be stopped, throw an error
if (scsistop) {
return -1;
}
// <EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͊<EFBFBD><EFBFBD><EFBFBD>݋֎~
// Interrupt is not permitted during sending
DI ();
// <EFBFBD><EFBFBD><EFBFBD>M<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƒ<EFBFBD><EFBFBD>M<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>A<EFBFBD>b<EFBFBD>v
// Send processing and raise send flag
if (SCSI_SENDPACKET(data, len) == 0) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>݋<EFBFBD><EFBFBD><EFBFBD>
// Interrupt permitted
EI ();
return -1;
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>݋<EFBFBD><EFBFBD><EFBFBD>
// Interrupt permitted
EI ();
// <EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>˗<EFBFBD><EFBFBD>ς<EFBFBD>
// Finished requesting send
trans_counter.send_byte += len;
return 0;
}
/************************************************
* RaSCSI <EFBFBD><EFBFBD><EFBFBD><EFBFBD>݋<EFBFBD><EFBFBD>A<EFBFBD>s<EFBFBD><EFBFBD><EFBFBD>ݒ<EFBFBD> <20>֐<EFBFBD> *
* RaSCSI Interrupt Permission Setting Function*
************************************************/
int SetPacketReception(int i)
{
@@ -486,19 +486,19 @@ int SetPacketReception(int i)
}
/************************************************
* RaSCSI <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݏ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>^ *
* RaSCSI Interrupt Processing Registration *
************************************************/
void RegisterIntProcess(int n)
{
volatile unsigned char *p;
// <EFBFBD>|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Ԋu(<28><><EFBFBD><EFBFBD>)<29>̍X<CC8D>V<EFBFBD>ƃA<C683>C<EFBFBD>h<EFBFBD><68><EFBFBD>J<EFBFBD>E<EFBFBD><45><EFBFBD>^<5E>N<EFBFBD><4E><EFBFBD>A
// Update polling interval (current) and clear idle counter
poll_current = n;
idle = 0;
if (intr_type == 0) {
// V-DISP GPIP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>݃x<EFBFBD>N<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><EFBFBD>L<EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><EFBFBD><EFBFBD>
// Overwrite V-DISP GPIP interrupt vectors
// and enable interrupt
B_INTVCS(0x46, (int)IntProcess);
p = (unsigned char *)MFP_AEB;
*p = *p | 0x10;
@@ -507,28 +507,28 @@ void RegisterIntProcess(int n)
p = (unsigned char *)MFP_IMRB;
*p = *p | 0x40;
} else if (intr_type == 1) {
// TimerA<EFBFBD>̓J<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>ݒ<EFBFBD>
// Set TimerA counter mode
VDISPST(NULL, 0, 0);
VDISPST(IntProcess, 0, poll_current);
}
}
/************************************************
* RaSCSI <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݏ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ύX *
* RaSCSI Interrupt Processing Update *
************************************************/
void UpdateIntProcess(int n)
{
// <EFBFBD>|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Ԋu(<28><><EFBFBD><EFBFBD>)<29>Ɠ<EFBFBD><C693><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>X<EFBFBD>V<EFBFBD><56><EFBFBD>Ȃ<EFBFBD>
// Do not update if polling interval (current) is the same
if (n == poll_current) {
return;
}
// <EFBFBD>|<7C>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Ԋu(<28><><EFBFBD><EFBFBD>)<29>̍X<CC8D>V<EFBFBD>ƃA<C683>C<EFBFBD>h<EFBFBD><68><EFBFBD>J<EFBFBD>E<EFBFBD><45><EFBFBD>^<5E>N<EFBFBD><4E><EFBFBD>A
// Update polling interval (current) and clear idle counter
poll_current = n;
idle = 0;
if (intr_type == 1) {
// TimerA<EFBFBD>͍ēo<EFBFBD>^<5E>K<EFBFBD>v
// TimerA requires re-registering
VDISPST(NULL, 0, 0);
VDISPST(IntProcess, 0, poll_current);
}

View File

@@ -3,9 +3,9 @@
// SCSI Target Emulator RaSCSI (*^..^*)
// for Raspberry Pi
//
// Powered by XM6 TypeG Technorogy.
// Powered by XM6 TypeG Technology.
// Copyright (C) 2016-2017 GIMONS
// [ RaSCSI <EFBFBD>C<EFBFBD>[<5B>T<EFBFBD>[<5B>l<EFBFBD>b<EFBFBD>g SCSI<53><49><EFBFBD> ]
// [ RaSCSI Ethernet SCSI Control Department ]
//
// Based on
// Neptune-X board driver for Human-68k(ESP-X) version 0.03
@@ -17,11 +17,11 @@
#ifndef scsictl_h
#define scsictl_h
// <EFBFBD>O<EFBFBD><EFBFBD><EFBFBD>[<5B>o<EFBFBD><6F><EFBFBD>ϐ<EFBFBD>
// Global variables
extern int intr_type;
extern int poll_interval;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>M<EFBFBD>J<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>^
// Transfer counter
struct trans_counter {
unsigned int send_byte;
unsigned int recv_byte;