[Coco] 6309 microproccessor project - 10-18-2003

John Collyer johncollyer at zoominternet.net
Sat Oct 18 12:22:00 EDT 2003

6309 microprocessor project.


The 32-bit 6309.asm enhanced instruction opcodes are coming along nicely.  I
came up with a switch option called security.  This means that I can include
the powerful but maybe harmful enhanced opcodes, which include special
opcode $11FD and special opcode $11FF.  The other two enhanced opcodes have
been moved to their permanent positions in the 6309 interpreter and include;
special opcode $11FC (breakpoint) and special opcode $11FE (exit the
emulator).  Because of the security switch, I can let the user of the
emulator decide whether to use these special opcodes or not.

The win32 functions for special opcode $11FD include:

1.  CloseHandle
2.  CopyFile
3.  CreateDirectory
4.  CreateFile
5.  DeleteFile
6.  FindClose
7.  FindFirstFile
8.  FindNextFile
9.  FlushFileBuffers
10. GetCurrentDirectory
11. GetDiskFreeSpace
12. GetFileAttributes
13. GetFileSize
14. GetFileTime
15. GetFullPathName
16. GetLastError
17. GetLongPathName
18. GetShortPathName
19. GetTempFileName
20. GetTempPath
21. OpenFile
22. ReadFile
23. RemoveDirectory
24. SearchPath
25. SetCurrentDirectory
26. SetEndOfFile
27. SetFileAttributes
28. SetFilePointer
29. SetFileTime
30. WriteFile

You interface with these functions by using opcode $11FD followed by a
postbyte of the function call number (1 - 30) and register x pointing to the
parameter block (Register X contains the address of the first parameter of
the parameters needed for the win32 function call).

To set up the parameters look at the win32.api documentation and save any
parameters in memory just as you see in the win32.api definition.

Here is an example:

BeginEx   leax MyFile,pcr   * the x register has to point to the parameters
          jsr Mywin32_4     * create file
          stq MyHandle      * save file handle
                            * do something to the file
          leax MyHandle,pcr * the x register has to point to the parameters
          jsr Mywin32_1     * close the file
          testw             * If there are no errors
          bne noerror       *
          os9 F$Exit        * Else exit with the error
noerror   os9 F$Exit        * exit with no errors
          end BeginEx       * done with example
* HANDLE CreateFile(
*  LPCTSTR lpFileName,                         // pointer to name of the
*  DWORD dwDesiredAccess,                      // access (read-write) mode
*  DWORD dwShareMode,                          // share mode
*  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security
*  DWORD dwCreationDistribution,        // how to create
*  DWORD dwFlagsAndAttributes,                // file attributes
*  HANDLE hTemplateFile                 // handle to file with attributes to
* );
Mywin32_4 fcb $11,$FD,$04   *
lpFName   fcb "Filename"    *
dwDAccess fcb 0,0,0,0       *
dwSMode   fcb 0,0,0,0       *
lpSAttr   fdb Attrib        * pointer to security attributes note: 16-bit
dwCreat   fcb 0,0,0,0       *
dwFlagA   fcb 0,0,0,0       *
hTmpFile  fcb 0,0,0,0       *
          fcb $39           * return
Attrib    fcb 0,0,0,0       * 32-bit security attributes
* BOOL CloseHandle(
*   HANDLE hObject // handle to object to close
* );
Mywin32_1 fcb $11,$FD,$01   *
          fcb $39           * return
MyHandle  fcb 0,0,0,0       * win32 handles are 32 bits

The enhanced instruction opcode $11FF will as before let you run code, but
this code will be Intel 32-bit flat assembly code. You return to the
emulator after your finished with the code.  The code can be located
anywhere in the emulator's physical memory space, but it must also be in the
emulator's virtual memory space.  You do that by writing the page number
into the Memory management registers.  All this can be accomplished because
win32 lets you allocate memory designated as read/write/execute.

Again if you are concerned about security you can set a switch not allowing
enhanced opcodes.

More later.

John Collyer

More information about the Coco mailing list