mirror of
https://github.com/akuker/RASCSI.git
synced 2025-08-05 17:25:47 +00:00
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:
@@ -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
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
@@ -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
|
@@ -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(ðer_addr, 0x00, sizeof(ether_addr));
|
||||
GetMacAddr(ðer_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)
|
||||
{
|
||||
|
@@ -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);
|
||||
|
||||
|
||||
|
@@ -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:
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user